[
  {
    "path": ".github/workflows/Tests.yml",
    "content": "name: Tests\n\non: [push]\n\njobs:\n  check:\n    name: Tests\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n        with:\n          submodules: recursive\n\n      - name: Install Foundry\n        uses: foundry-rs/foundry-toolchain@v1\n        with:\n          version: nightly\n\n      - name: Run tests\n        run: forge test -vvv\n"
  },
  {
    "path": ".gitignore",
    "content": "cache/\nout/\nnode_modules/\nenv/\ntmp/\nbroadcast/\n.vscode/\n\nbuffer\n.DS_Store\n\n.env\n.env.local\n.env.testnet\n.env.mainnet\n\n!/broadcast\n/broadcast/*/31337/\n/broadcast/**/dry-run/\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"lib/uniswap-v3-core\"]\n\tpath = lib/uniswap-v3-core\n\turl = https://github.com/Uniswap/v3-core\n[submodule \"lib/uniswap-v3-periphery\"]\n\tpath = lib/uniswap-v3-periphery\n\turl = https://github.com/Uniswap/v3-periphery\n[submodule \"lib/forge-std\"]\n\tpath = lib/forge-std\n\turl = https://github.com/foundry-rs/forge-std\n[submodule \"lib/openzeppelin-contracts\"]\n\tpath = lib/openzeppelin-contracts\n\turl = https://github.com/openzeppelin/openzeppelin-contracts\n[submodule \"lib/solmate\"]\n\tpath = lib/solmate\n\turl = https://github.com/transmissions11/solmate\n[submodule \"lib/compound-protocol\"]\n\tpath = lib/compound-protocol\n\turl = https://github.com/compound-finance/compound-protocol\n[submodule \"lib/conditional-tokens-contracts\"]\n\tpath = lib/conditional-tokens-contracts\n\turl = https://github.com/gnosis/conditional-tokens-contracts\n[submodule \"lib/conditional-tokens-market-makers\"]\n\tpath = lib/conditional-tokens-market-makers\n\turl = https://github.com/gnosis/conditional-tokens-market-makers\n[submodule \"lib/uniswap-v3-staker\"]\n\tpath = lib/uniswap-v3-staker\n\turl = https://github.com/Uniswap/v3-staker\n[submodule \"lib/fx-portal\"]\n\tpath = lib/fx-portal\n\turl = https://github.com/fx-portal/contracts\n[submodule \"lib/solenv\"]\n\tpath = lib/solenv\n\turl = https://github.com/memester-xyz/solenv\n[submodule \"lib/solady\"]\n\tpath = lib/solady\n\turl = https://github.com/vectorized/solady\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n    \"overrides\": [\n        {\n            \"files\": \"*.md\",\n            \"options\": {\n                \"tabWidth\": 1\n            }\n        }\n    ],\n    \"arrowParens\": \"avoid\",\n    \"bracketSpacing\": true,\n    \"endOfLine\": \"auto\",\n    \"printWidth\": 120,\n    \"singleQuote\": false,\n    \"tabWidth\": 4,\n    \"trailingComma\": \"all\"\n}\n"
  },
  {
    "path": "LICENSE.md",
    "content": "# MIT License\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Polymarket CTF Exchange\n\n[![Version][version-badge]][version-link]\n[![License][license-badge]][license-link]\n[![Test][ci-badge]][ci-link]\n\n[version-badge]: https://img.shields.io/github/v/release/polymarket/ctf-exchange.svg?label=version\n[version-link]: https://github.com/Polymarket/ctf-exchange/releases\n[license-badge]: https://img.shields.io/github/license/polymarket/ctf-exchange\n[license-link]: https://github.com/Polymarket/ctf-exchange/blob/main/LICENSE.md\n[ci-badge]: https://github.com/Polymarket/ctf-exchange/actions/workflows/Tests.yml/badge.svg\n[ci-link]: https://github.com/Polymarket/ctf-exchange/actions/workflows/Tests.yml\n\n## Background\n\nThe Polymarket CTF Exchange is an exchange protocol that facilitates atomic swaps between [Conditional Tokens Framework(CTF)](https://docs.gnosis.io/conditionaltokens/) ERC1155 assets and an ERC20 collateral asset.\n\nIt is intended to be used in a hybrid-decentralized exchange model wherein there is an operator that provides offchain matching services while settlement happens on-chain, non-custodially.\n\n\n## Documentation\n\nDocs for the CTF Exchange are available in this repo [here](./docs/Overview.md).\n\n## Audit\n\nThese contracts have been audited by Chainsecurity and the report is available [here](./audit/ChainSecurity_Polymarket_Exchange_audit.pdf).\n\n\n## Deployments\n\n| Network          | Address                                                                           |\n| ---------------- | --------------------------------------------------------------------------------- |\n| Polygon          | [0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E](https://polygonscan.com/address/0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E)|\n| Amoy           | [0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40](https://amoy.polygonscan.com/address/0xdfe02eb6733538f8ea35d585af8de5958ad99e40)|\n\n\n## Development\n\nInstall [Foundry](https://github.com/foundry-rs/foundry/).\n\nFoundry has daily updates, run `foundryup` to update `forge` and `cast`.\n\n---\n\n## Testing\n\nTo run all tests: `forge test`\n\nTo run test functions matching a regex pattern `forge test -m PATTERN`\n\nTo run tests in contracts matching a regex pattern `forge test --mc PATTERN`\n\nSet `-vvv` to see a stack trace for a failed test.\n\n---\n\nTo install new foundry submodules: `forge install UserName/RepoName@CommitHash`\n\nTo remove: `forge remove UserName/RepoName`\n\n"
  },
  {
    "path": "artifacts/CTFExchange.json",
    "content": "{\n    \"abi\": [\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"_collateral\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"_ctf\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"_proxyFactory\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"_safeFactory\",\n            \"type\": \"address\"\n          }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"constructor\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"AlreadyRegistered\",\n        \"type\": \"error\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"FeeTooHigh\",\n        \"type\": \"error\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"InvalidComplement\",\n        \"type\": \"error\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"InvalidNonce\",\n        \"type\": \"error\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"InvalidSignature\",\n        \"type\": \"error\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"InvalidTokenId\",\n        \"type\": \"error\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"MakingGtRemaining\",\n        \"type\": \"error\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"MismatchedTokenIds\",\n        \"type\": \"error\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"NotAdmin\",\n        \"type\": \"error\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"NotCrossing\",\n        \"type\": \"error\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"NotOperator\",\n        \"type\": \"error\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"NotOwner\",\n        \"type\": \"error\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"NotTaker\",\n        \"type\": \"error\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"OrderExpired\",\n        \"type\": \"error\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"OrderFilledOrCancelled\",\n        \"type\": \"error\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"Paused\",\n        \"type\": \"error\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"TooLittleTokensReceived\",\n        \"type\": \"error\"\n      },\n      {\n        \"anonymous\": false,\n        \"inputs\": [\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"receiver\",\n            \"type\": \"address\"\n          },\n          {\n            \"indexed\": false,\n            \"internalType\": \"uint256\",\n            \"name\": \"tokenId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"indexed\": false,\n            \"internalType\": \"uint256\",\n            \"name\": \"amount\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"name\": \"FeeCharged\",\n        \"type\": \"event\"\n      },\n      {\n        \"anonymous\": false,\n        \"inputs\": [\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"newAdminAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"admin\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"NewAdmin\",\n        \"type\": \"event\"\n      },\n      {\n        \"anonymous\": false,\n        \"inputs\": [\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"newOperatorAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"admin\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"NewOperator\",\n        \"type\": \"event\"\n      },\n      {\n        \"anonymous\": false,\n        \"inputs\": [\n          {\n            \"indexed\": true,\n            \"internalType\": \"bytes32\",\n            \"name\": \"orderHash\",\n            \"type\": \"bytes32\"\n          }\n        ],\n        \"name\": \"OrderCancelled\",\n        \"type\": \"event\"\n      },\n      {\n        \"anonymous\": false,\n        \"inputs\": [\n          {\n            \"indexed\": true,\n            \"internalType\": \"bytes32\",\n            \"name\": \"orderHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"maker\",\n            \"type\": \"address\"\n          },\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"taker\",\n            \"type\": \"address\"\n          },\n          {\n            \"indexed\": false,\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"indexed\": false,\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"indexed\": false,\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAmountFilled\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"indexed\": false,\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAmountFilled\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"indexed\": false,\n            \"internalType\": \"uint256\",\n            \"name\": \"fee\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"name\": \"OrderFilled\",\n        \"type\": \"event\"\n      },\n      {\n        \"anonymous\": false,\n        \"inputs\": [\n          {\n            \"indexed\": true,\n            \"internalType\": \"bytes32\",\n            \"name\": \"takerOrderHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"takerOrderMaker\",\n            \"type\": \"address\"\n          },\n          {\n            \"indexed\": false,\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"indexed\": false,\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"indexed\": false,\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAmountFilled\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"indexed\": false,\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAmountFilled\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"name\": \"OrdersMatched\",\n        \"type\": \"event\"\n      },\n      {\n        \"anonymous\": false,\n        \"inputs\": [\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"oldProxyFactory\",\n            \"type\": \"address\"\n          },\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"newProxyFactory\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"ProxyFactoryUpdated\",\n        \"type\": \"event\"\n      },\n      {\n        \"anonymous\": false,\n        \"inputs\": [\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"removedAdmin\",\n            \"type\": \"address\"\n          },\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"admin\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"RemovedAdmin\",\n        \"type\": \"event\"\n      },\n      {\n        \"anonymous\": false,\n        \"inputs\": [\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"removedOperator\",\n            \"type\": \"address\"\n          },\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"admin\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"RemovedOperator\",\n        \"type\": \"event\"\n      },\n      {\n        \"anonymous\": false,\n        \"inputs\": [\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"oldSafeFactory\",\n            \"type\": \"address\"\n          },\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"newSafeFactory\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"SafeFactoryUpdated\",\n        \"type\": \"event\"\n      },\n      {\n        \"anonymous\": false,\n        \"inputs\": [\n          {\n            \"indexed\": true,\n            \"internalType\": \"uint256\",\n            \"name\": \"token0\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"indexed\": true,\n            \"internalType\": \"uint256\",\n            \"name\": \"token1\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"indexed\": true,\n            \"internalType\": \"bytes32\",\n            \"name\": \"conditionId\",\n            \"type\": \"bytes32\"\n          }\n        ],\n        \"name\": \"TokenRegistered\",\n        \"type\": \"event\"\n      },\n      {\n        \"anonymous\": false,\n        \"inputs\": [\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"pauser\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"TradingPaused\",\n        \"type\": \"event\"\n      },\n      {\n        \"anonymous\": false,\n        \"inputs\": [\n          {\n            \"indexed\": true,\n            \"internalType\": \"address\",\n            \"name\": \"pauser\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"TradingUnpaused\",\n        \"type\": \"event\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"admin_\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"addAdmin\",\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"operator_\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"addOperator\",\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"admins\",\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            \"components\": [\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"salt\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"maker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"signer\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"taker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"tokenId\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"makerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"takerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"expiration\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"nonce\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"feeRateBps\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"enum Side\",\n                \"name\": \"side\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"enum SignatureType\",\n                \"name\": \"signatureType\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"bytes\",\n                \"name\": \"signature\",\n                \"type\": \"bytes\"\n              }\n            ],\n            \"internalType\": \"struct Order\",\n            \"name\": \"order\",\n            \"type\": \"tuple\"\n          }\n        ],\n        \"name\": \"cancelOrder\",\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"components\": [\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"salt\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"maker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"signer\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"taker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"tokenId\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"makerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"takerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"expiration\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"nonce\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"feeRateBps\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"enum Side\",\n                \"name\": \"side\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"enum SignatureType\",\n                \"name\": \"signatureType\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"bytes\",\n                \"name\": \"signature\",\n                \"type\": \"bytes\"\n              }\n            ],\n            \"internalType\": \"struct Order[]\",\n            \"name\": \"orders\",\n            \"type\": \"tuple[]\"\n          }\n        ],\n        \"name\": \"cancelOrders\",\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"domainSeparator\",\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            \"components\": [\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"salt\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"maker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"signer\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"taker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"tokenId\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"makerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"takerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"expiration\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"nonce\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"feeRateBps\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"enum Side\",\n                \"name\": \"side\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"enum SignatureType\",\n                \"name\": \"signatureType\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"bytes\",\n                \"name\": \"signature\",\n                \"type\": \"bytes\"\n              }\n            ],\n            \"internalType\": \"struct Order\",\n            \"name\": \"order\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"fillAmount\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"name\": \"fillOrder\",\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"components\": [\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"salt\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"maker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"signer\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"taker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"tokenId\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"makerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"takerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"expiration\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"nonce\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"feeRateBps\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"enum Side\",\n                \"name\": \"side\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"enum SignatureType\",\n                \"name\": \"signatureType\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"bytes\",\n                \"name\": \"signature\",\n                \"type\": \"bytes\"\n              }\n            ],\n            \"internalType\": \"struct Order[]\",\n            \"name\": \"orders\",\n            \"type\": \"tuple[]\"\n          },\n          {\n            \"internalType\": \"uint256[]\",\n            \"name\": \"fillAmounts\",\n            \"type\": \"uint256[]\"\n          }\n        ],\n        \"name\": \"fillOrders\",\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"getCollateral\",\n        \"outputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"\",\n            \"type\": \"address\"\n          }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"token\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"name\": \"getComplement\",\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\": \"uint256\",\n            \"name\": \"token\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"name\": \"getConditionId\",\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\": \"getCtf\",\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\": \"getMaxFeeRate\",\n        \"outputs\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"stateMutability\": \"pure\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"orderHash\",\n            \"type\": \"bytes32\"\n          }\n        ],\n        \"name\": \"getOrderStatus\",\n        \"outputs\": [\n          {\n            \"components\": [\n              {\n                \"internalType\": \"bool\",\n                \"name\": \"isFilledOrCancelled\",\n                \"type\": \"bool\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"remaining\",\n                \"type\": \"uint256\"\n              }\n            ],\n            \"internalType\": \"struct OrderStatus\",\n            \"name\": \"\",\n            \"type\": \"tuple\"\n          }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"getPolyProxyFactoryImplementation\",\n        \"outputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"\",\n            \"type\": \"address\"\n          }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"_addr\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"getPolyProxyWalletAddress\",\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\": \"getProxyFactory\",\n        \"outputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"\",\n            \"type\": \"address\"\n          }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"_addr\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"getSafeAddress\",\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\": \"getSafeFactory\",\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\": \"getSafeFactoryImplementation\",\n        \"outputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"\",\n            \"type\": \"address\"\n          }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"components\": [\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"salt\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"maker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"signer\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"taker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"tokenId\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"makerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"takerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"expiration\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"nonce\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"feeRateBps\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"enum Side\",\n                \"name\": \"side\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"enum SignatureType\",\n                \"name\": \"signatureType\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"bytes\",\n                \"name\": \"signature\",\n                \"type\": \"bytes\"\n              }\n            ],\n            \"internalType\": \"struct Order\",\n            \"name\": \"order\",\n            \"type\": \"tuple\"\n          }\n        ],\n        \"name\": \"hashOrder\",\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\": \"incrementNonce\",\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"usr\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"isAdmin\",\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            \"internalType\": \"address\",\n            \"name\": \"usr\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"isOperator\",\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            \"internalType\": \"address\",\n            \"name\": \"usr\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"nonce\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"name\": \"isValidNonce\",\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\": \"uint256\",\n                \"name\": \"salt\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"maker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"signer\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"taker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"tokenId\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"makerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"takerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"expiration\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"nonce\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"feeRateBps\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"enum Side\",\n                \"name\": \"side\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"enum SignatureType\",\n                \"name\": \"signatureType\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"bytes\",\n                \"name\": \"signature\",\n                \"type\": \"bytes\"\n              }\n            ],\n            \"internalType\": \"struct Order\",\n            \"name\": \"takerOrder\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"components\": [\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"salt\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"maker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"signer\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"taker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"tokenId\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"makerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"takerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"expiration\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"nonce\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"feeRateBps\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"enum Side\",\n                \"name\": \"side\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"enum SignatureType\",\n                \"name\": \"signatureType\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"bytes\",\n                \"name\": \"signature\",\n                \"type\": \"bytes\"\n              }\n            ],\n            \"internalType\": \"struct Order[]\",\n            \"name\": \"makerOrders\",\n            \"type\": \"tuple[]\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerFillAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256[]\",\n            \"name\": \"makerFillAmounts\",\n            \"type\": \"uint256[]\"\n          }\n        ],\n        \"name\": \"matchOrders\",\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"nonces\",\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\": \"\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256[]\",\n            \"name\": \"\",\n            \"type\": \"uint256[]\"\n          },\n          {\n            \"internalType\": \"uint256[]\",\n            \"name\": \"\",\n            \"type\": \"uint256[]\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"name\": \"onERC1155BatchReceived\",\n        \"outputs\": [\n          {\n            \"internalType\": \"bytes4\",\n            \"name\": \"\",\n            \"type\": \"bytes4\"\n          }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"name\": \"onERC1155Received\",\n        \"outputs\": [\n          {\n            \"internalType\": \"bytes4\",\n            \"name\": \"\",\n            \"type\": \"bytes4\"\n          }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"operators\",\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\": \"\",\n            \"type\": \"bytes32\"\n          }\n        ],\n        \"name\": \"orderStatus\",\n        \"outputs\": [\n          {\n            \"internalType\": \"bool\",\n            \"name\": \"isFilledOrCancelled\",\n            \"type\": \"bool\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"remaining\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"parentCollectionId\",\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\": \"pauseTrading\",\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"paused\",\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\": \"proxyFactory\",\n        \"outputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"\",\n            \"type\": \"address\"\n          }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"token\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"complement\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"conditionId\",\n            \"type\": \"bytes32\"\n          }\n        ],\n        \"name\": \"registerToken\",\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"name\": \"registry\",\n        \"outputs\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"complement\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"conditionId\",\n            \"type\": \"bytes32\"\n          }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"admin\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"removeAdmin\",\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"operator\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"removeOperator\",\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"renounceAdminRole\",\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"renounceOperatorRole\",\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [],\n        \"name\": \"safeFactory\",\n        \"outputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"\",\n            \"type\": \"address\"\n          }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"_newProxyFactory\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"setProxyFactory\",\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"_newSafeFactory\",\n            \"type\": \"address\"\n          }\n        ],\n        \"name\": \"setSafeFactory\",\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"bytes4\",\n            \"name\": \"interfaceId\",\n            \"type\": \"bytes4\"\n          }\n        ],\n        \"name\": \"supportsInterface\",\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\": \"unpauseTrading\",\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"token\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"complement\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"name\": \"validateComplement\",\n        \"outputs\": [],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"components\": [\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"salt\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"maker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"signer\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"taker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"tokenId\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"makerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"takerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"expiration\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"nonce\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"feeRateBps\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"enum Side\",\n                \"name\": \"side\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"enum SignatureType\",\n                \"name\": \"signatureType\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"bytes\",\n                \"name\": \"signature\",\n                \"type\": \"bytes\"\n              }\n            ],\n            \"internalType\": \"struct Order\",\n            \"name\": \"order\",\n            \"type\": \"tuple\"\n          }\n        ],\n        \"name\": \"validateOrder\",\n        \"outputs\": [],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"orderHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"components\": [\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"salt\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"maker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"signer\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"taker\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"tokenId\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"makerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"takerAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"expiration\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"nonce\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"feeRateBps\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"enum Side\",\n                \"name\": \"side\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"enum SignatureType\",\n                \"name\": \"signatureType\",\n                \"type\": \"uint8\"\n              },\n              {\n                \"internalType\": \"bytes\",\n                \"name\": \"signature\",\n                \"type\": \"bytes\"\n              }\n            ],\n            \"internalType\": \"struct Order\",\n            \"name\": \"order\",\n            \"type\": \"tuple\"\n          }\n        ],\n        \"name\": \"validateOrderSignature\",\n        \"outputs\": [],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n      },\n      {\n        \"inputs\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"tokenId\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"name\": \"validateTokenId\",\n        \"outputs\": [],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n      }\n    ]\n}"
  },
  {
    "path": "artifacts/ConditionalTokens.json",
    "content": "{\n    \"abi\": [\n        {\n            \"anonymous\": false,\n            \"inputs\": [\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"address\",\n                    \"name\": \"owner\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"address\",\n                    \"name\": \"operator\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"bool\",\n                    \"name\": \"approved\",\n                    \"type\": \"bool\"\n                }\n            ],\n            \"name\": \"ApprovalForAll\",\n            \"type\": \"event\"\n        },\n        {\n            \"anonymous\": false,\n            \"inputs\": [\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"conditionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"address\",\n                    \"name\": \"oracle\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"questionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"uint256\",\n                    \"name\": \"outcomeSlotCount\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"name\": \"ConditionPreparation\",\n            \"type\": \"event\"\n        },\n        {\n            \"anonymous\": false,\n            \"inputs\": [\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"conditionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"address\",\n                    \"name\": \"oracle\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"questionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"uint256\",\n                    \"name\": \"outcomeSlotCount\",\n                    \"type\": \"uint256\"\n                },\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"uint256[]\",\n                    \"name\": \"payoutNumerators\",\n                    \"type\": \"uint256[]\"\n                }\n            ],\n            \"name\": \"ConditionResolution\",\n            \"type\": \"event\"\n        },\n        {\n            \"anonymous\": false,\n            \"inputs\": [\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"address\",\n                    \"name\": \"redeemer\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"contract IERC20\",\n                    \"name\": \"collateralToken\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"parentCollectionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"conditionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"uint256[]\",\n                    \"name\": \"indexSets\",\n                    \"type\": \"uint256[]\"\n                },\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"uint256\",\n                    \"name\": \"payout\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"name\": \"PayoutRedemption\",\n            \"type\": \"event\"\n        },\n        {\n            \"anonymous\": false,\n            \"inputs\": [\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"address\",\n                    \"name\": \"stakeholder\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"contract IERC20\",\n                    \"name\": \"collateralToken\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"parentCollectionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"conditionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"uint256[]\",\n                    \"name\": \"partition\",\n                    \"type\": \"uint256[]\"\n                },\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"uint256\",\n                    \"name\": \"amount\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"name\": \"PositionSplit\",\n            \"type\": \"event\"\n        },\n        {\n            \"anonymous\": false,\n            \"inputs\": [\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"address\",\n                    \"name\": \"stakeholder\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"contract IERC20\",\n                    \"name\": \"collateralToken\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"parentCollectionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"conditionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"uint256[]\",\n                    \"name\": \"partition\",\n                    \"type\": \"uint256[]\"\n                },\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"uint256\",\n                    \"name\": \"amount\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"name\": \"PositionsMerge\",\n            \"type\": \"event\"\n        },\n        {\n            \"anonymous\": false,\n            \"inputs\": [\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"address\",\n                    \"name\": \"operator\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"address\",\n                    \"name\": \"from\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"address\",\n                    \"name\": \"to\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"uint256[]\",\n                    \"name\": \"ids\",\n                    \"type\": \"uint256[]\"\n                },\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"uint256[]\",\n                    \"name\": \"values\",\n                    \"type\": \"uint256[]\"\n                }\n            ],\n            \"name\": \"TransferBatch\",\n            \"type\": \"event\"\n        },\n        {\n            \"anonymous\": false,\n            \"inputs\": [\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"address\",\n                    \"name\": \"operator\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"address\",\n                    \"name\": \"from\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"address\",\n                    \"name\": \"to\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"uint256\",\n                    \"name\": \"id\",\n                    \"type\": \"uint256\"\n                },\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"uint256\",\n                    \"name\": \"value\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"name\": \"TransferSingle\",\n            \"type\": \"event\"\n        },\n        {\n            \"anonymous\": false,\n            \"inputs\": [\n                {\n                    \"indexed\": false,\n                    \"internalType\": \"string\",\n                    \"name\": \"value\",\n                    \"type\": \"string\"\n                },\n                {\n                    \"indexed\": true,\n                    \"internalType\": \"uint256\",\n                    \"name\": \"id\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"name\": \"URI\",\n            \"type\": \"event\"\n        },\n        {\n            \"constant\": true,\n            \"inputs\": [\n                {\n                    \"internalType\": \"address\",\n                    \"name\": \"owner\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"internalType\": \"uint256\",\n                    \"name\": \"id\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"name\": \"balanceOf\",\n            \"outputs\": [\n                {\n                    \"internalType\": \"uint256\",\n                    \"name\": \"\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"payable\": false,\n            \"stateMutability\": \"view\",\n            \"type\": \"function\"\n        },\n        {\n            \"constant\": true,\n            \"inputs\": [\n                {\n                    \"internalType\": \"address[]\",\n                    \"name\": \"owners\",\n                    \"type\": \"address[]\"\n                },\n                {\n                    \"internalType\": \"uint256[]\",\n                    \"name\": \"ids\",\n                    \"type\": \"uint256[]\"\n                }\n            ],\n            \"name\": \"balanceOfBatch\",\n            \"outputs\": [\n                {\n                    \"internalType\": \"uint256[]\",\n                    \"name\": \"\",\n                    \"type\": \"uint256[]\"\n                }\n            ],\n            \"payable\": false,\n            \"stateMutability\": \"view\",\n            \"type\": \"function\"\n        },\n        {\n            \"constant\": true,\n            \"inputs\": [\n                {\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"parentCollectionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"conditionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"internalType\": \"uint256\",\n                    \"name\": \"indexSet\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"name\": \"getCollectionId\",\n            \"outputs\": [\n                {\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"\",\n                    \"type\": \"bytes32\"\n                }\n            ],\n            \"payable\": false,\n            \"stateMutability\": \"view\",\n            \"type\": \"function\"\n        },\n        {\n            \"constant\": true,\n            \"inputs\": [\n                {\n                    \"internalType\": \"address\",\n                    \"name\": \"oracle\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"questionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"internalType\": \"uint256\",\n                    \"name\": \"outcomeSlotCount\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"name\": \"getConditionId\",\n            \"outputs\": [\n                {\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"\",\n                    \"type\": \"bytes32\"\n                }\n            ],\n            \"payable\": false,\n            \"stateMutability\": \"pure\",\n            \"type\": \"function\"\n        },\n        {\n            \"constant\": true,\n            \"inputs\": [\n                {\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"conditionId\",\n                    \"type\": \"bytes32\"\n                }\n            ],\n            \"name\": \"getOutcomeSlotCount\",\n            \"outputs\": [\n                {\n                    \"internalType\": \"uint256\",\n                    \"name\": \"\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"payable\": false,\n            \"stateMutability\": \"view\",\n            \"type\": \"function\"\n        },\n        {\n            \"constant\": true,\n            \"inputs\": [\n                {\n                    \"internalType\": \"contract IERC20\",\n                    \"name\": \"collateralToken\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"collectionId\",\n                    \"type\": \"bytes32\"\n                }\n            ],\n            \"name\": \"getPositionId\",\n            \"outputs\": [\n                {\n                    \"internalType\": \"uint256\",\n                    \"name\": \"\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"payable\": false,\n            \"stateMutability\": \"pure\",\n            \"type\": \"function\"\n        },\n        {\n            \"constant\": true,\n            \"inputs\": [\n                {\n                    \"internalType\": \"address\",\n                    \"name\": \"owner\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"internalType\": \"address\",\n                    \"name\": \"operator\",\n                    \"type\": \"address\"\n                }\n            ],\n            \"name\": \"isApprovedForAll\",\n            \"outputs\": [\n                {\n                    \"internalType\": \"bool\",\n                    \"name\": \"\",\n                    \"type\": \"bool\"\n                }\n            ],\n            \"payable\": false,\n            \"stateMutability\": \"view\",\n            \"type\": \"function\"\n        },\n        {\n            \"constant\": false,\n            \"inputs\": [\n                {\n                    \"internalType\": \"contract IERC20\",\n                    \"name\": \"collateralToken\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"parentCollectionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"conditionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"internalType\": \"uint256[]\",\n                    \"name\": \"partition\",\n                    \"type\": \"uint256[]\"\n                },\n                {\n                    \"internalType\": \"uint256\",\n                    \"name\": \"amount\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"name\": \"mergePositions\",\n            \"outputs\": [],\n            \"payable\": false,\n            \"stateMutability\": \"nonpayable\",\n            \"type\": \"function\"\n        },\n        {\n            \"constant\": true,\n            \"inputs\": [\n                {\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"\",\n                    \"type\": \"bytes32\"\n                }\n            ],\n            \"name\": \"payoutDenominator\",\n            \"outputs\": [\n                {\n                    \"internalType\": \"uint256\",\n                    \"name\": \"\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"payable\": false,\n            \"stateMutability\": \"view\",\n            \"type\": \"function\"\n        },\n        {\n            \"constant\": true,\n            \"inputs\": [\n                {\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"internalType\": \"uint256\",\n                    \"name\": \"\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"name\": \"payoutNumerators\",\n            \"outputs\": [\n                {\n                    \"internalType\": \"uint256\",\n                    \"name\": \"\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"payable\": false,\n            \"stateMutability\": \"view\",\n            \"type\": \"function\"\n        },\n        {\n            \"constant\": false,\n            \"inputs\": [\n                {\n                    \"internalType\": \"address\",\n                    \"name\": \"oracle\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"questionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"internalType\": \"uint256\",\n                    \"name\": \"outcomeSlotCount\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"name\": \"prepareCondition\",\n            \"outputs\": [],\n            \"payable\": false,\n            \"stateMutability\": \"nonpayable\",\n            \"type\": \"function\"\n        },\n        {\n            \"constant\": false,\n            \"inputs\": [\n                {\n                    \"internalType\": \"contract IERC20\",\n                    \"name\": \"collateralToken\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"parentCollectionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"conditionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"internalType\": \"uint256[]\",\n                    \"name\": \"indexSets\",\n                    \"type\": \"uint256[]\"\n                }\n            ],\n            \"name\": \"redeemPositions\",\n            \"outputs\": [],\n            \"payable\": false,\n            \"stateMutability\": \"nonpayable\",\n            \"type\": \"function\"\n        },\n        {\n            \"constant\": false,\n            \"inputs\": [\n                {\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"questionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"internalType\": \"uint256[]\",\n                    \"name\": \"payouts\",\n                    \"type\": \"uint256[]\"\n                }\n            ],\n            \"name\": \"reportPayouts\",\n            \"outputs\": [],\n            \"payable\": false,\n            \"stateMutability\": \"nonpayable\",\n            \"type\": \"function\"\n        },\n        {\n            \"constant\": false,\n            \"inputs\": [\n                {\n                    \"internalType\": \"address\",\n                    \"name\": \"from\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"internalType\": \"address\",\n                    \"name\": \"to\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"internalType\": \"uint256[]\",\n                    \"name\": \"ids\",\n                    \"type\": \"uint256[]\"\n                },\n                {\n                    \"internalType\": \"uint256[]\",\n                    \"name\": \"values\",\n                    \"type\": \"uint256[]\"\n                },\n                {\n                    \"internalType\": \"bytes\",\n                    \"name\": \"data\",\n                    \"type\": \"bytes\"\n                }\n            ],\n            \"name\": \"safeBatchTransferFrom\",\n            \"outputs\": [],\n            \"payable\": false,\n            \"stateMutability\": \"nonpayable\",\n            \"type\": \"function\"\n        },\n        {\n            \"constant\": false,\n            \"inputs\": [\n                {\n                    \"internalType\": \"address\",\n                    \"name\": \"from\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"internalType\": \"address\",\n                    \"name\": \"to\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"internalType\": \"uint256\",\n                    \"name\": \"id\",\n                    \"type\": \"uint256\"\n                },\n                {\n                    \"internalType\": \"uint256\",\n                    \"name\": \"value\",\n                    \"type\": \"uint256\"\n                },\n                {\n                    \"internalType\": \"bytes\",\n                    \"name\": \"data\",\n                    \"type\": \"bytes\"\n                }\n            ],\n            \"name\": \"safeTransferFrom\",\n            \"outputs\": [],\n            \"payable\": false,\n            \"stateMutability\": \"nonpayable\",\n            \"type\": \"function\"\n        },\n        {\n            \"constant\": false,\n            \"inputs\": [\n                {\n                    \"internalType\": \"address\",\n                    \"name\": \"operator\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"internalType\": \"bool\",\n                    \"name\": \"approved\",\n                    \"type\": \"bool\"\n                }\n            ],\n            \"name\": \"setApprovalForAll\",\n            \"outputs\": [],\n            \"payable\": false,\n            \"stateMutability\": \"nonpayable\",\n            \"type\": \"function\"\n        },\n        {\n            \"constant\": false,\n            \"inputs\": [\n                {\n                    \"internalType\": \"contract IERC20\",\n                    \"name\": \"collateralToken\",\n                    \"type\": \"address\"\n                },\n                {\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"parentCollectionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"internalType\": \"bytes32\",\n                    \"name\": \"conditionId\",\n                    \"type\": \"bytes32\"\n                },\n                {\n                    \"internalType\": \"uint256[]\",\n                    \"name\": \"partition\",\n                    \"type\": \"uint256[]\"\n                },\n                {\n                    \"internalType\": \"uint256\",\n                    \"name\": \"amount\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"name\": \"splitPosition\",\n            \"outputs\": [],\n            \"payable\": false,\n            \"stateMutability\": \"nonpayable\",\n            \"type\": \"function\"\n        },\n        {\n            \"constant\": true,\n            \"inputs\": [\n                {\n                    \"internalType\": \"bytes4\",\n                    \"name\": \"interfaceId\",\n                    \"type\": \"bytes4\"\n                }\n            ],\n            \"name\": \"supportsInterface\",\n            \"outputs\": [\n                {\n                    \"internalType\": \"bool\",\n                    \"name\": \"\",\n                    \"type\": \"bool\"\n                }\n            ],\n            \"payable\": false,\n            \"stateMutability\": \"view\",\n            \"type\": \"function\"\n        }\n    ],\n    \"bytecode\": {\n        \"object\": \"0x60806040526200001f6301ffc9a760e01b6001600160e01b036200004016565b6200003a636cdb3d1360e11b6001600160e01b036200004016565b620000c5565b6001600160e01b03198082161415620000a0576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b6139b380620000d56000396000f3fe608060405234801561001057600080fd5b50600436106101155760003560e01c8063856296f7116100a2578063d42dc0c211610071578063d42dc0c21461071a578063d96ee75414610737578063dd34de6714610769578063e985e9c514610786578063f242432a146107b457610115565b8063856296f7146105c45780639e7212ad146105ed578063a22cb46514610677578063c49298ac146106a557610115565b80632eb2c2d6116100e95780632eb2c2d61461024257806339dd7530146103695780634e1273f41461039557806372ce427514610508578063852c6ae21461059257610115565b8062fdd58e1461011a57806301b7037c1461015857806301ffc9a7146101e45780630504c8141461021f575b600080fd5b6101466004803603604081101561013057600080fd5b506001600160a01b038135169060200135610847565b60408051918252519081900360200190f35b6101e26004803603608081101561016e57600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b8111156101a457600080fd5b8201836020820111156101b657600080fd5b803590602001918460208302840111600160201b831117156101d757600080fd5b5090925090506108b9565b005b61020b600480360360208110156101fa57600080fd5b50356001600160e01b031916610c38565b604080519115158252519081900360200190f35b6101466004803603604081101561023557600080fd5b5080359060200135610c57565b6101e2600480360360a081101561025857600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561028b57600080fd5b82018360208201111561029d57600080fd5b803590602001918460208302840111600160201b831117156102be57600080fd5b919390929091602081019035600160201b8111156102db57600080fd5b8201836020820111156102ed57600080fd5b803590602001918460208302840111600160201b8311171561030e57600080fd5b919390929091602081019035600160201b81111561032b57600080fd5b82018360208201111561033d57600080fd5b803590602001918460018302840111600160201b8311171561035e57600080fd5b509092509050610c85565b6101466004803603604081101561037f57600080fd5b506001600160a01b038135169060200135611012565b6104b8600480360360408110156103ab57600080fd5b810190602081018135600160201b8111156103c557600080fd5b8201836020820111156103d757600080fd5b803590602001918460208302840111600160201b831117156103f857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561044757600080fd5b82018360208201111561045957600080fd5b803590602001918460208302840111600160201b8311171561047a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611025945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104f45781810151838201526020016104dc565b505050509050019250505060405180910390f35b6101e2600480360360a081101561051e57600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b81111561055457600080fd5b82018360208201111561056657600080fd5b803590602001918460208302840111600160201b8311171561058757600080fd5b91935091503561118c565b610146600480360360608110156105a857600080fd5b506001600160a01b038135169060208101359060400135611573565b610146600480360360608110156105da57600080fd5b5080359060208101359060400135611588565b6101e2600480360360a081101561060357600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b81111561063957600080fd5b82018360208201111561064b57600080fd5b803590602001918460208302840111600160201b8311171561066c57600080fd5b919350915035611595565b6101e26004803603604081101561068d57600080fd5b506001600160a01b038135169060200135151561198c565b6101e2600480360360408110156106bb57600080fd5b81359190810190604081016020820135600160201b8111156106dc57600080fd5b8201836020820111156106ee57600080fd5b803590602001918460208302840111600160201b8311171561070f57600080fd5b5090925090506119fa565b6101466004803603602081101561073057600080fd5b5035611ce4565b6101e26004803603606081101561074d57600080fd5b506001600160a01b038135169060208101359060400135611cf6565b6101466004803603602081101561077f57600080fd5b5035611e8e565b61020b6004803603604081101561079c57600080fd5b506001600160a01b0381358116916020013516611ea0565b6101e2600480360360a08110156107ca57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561080957600080fd5b82018360208201111561081b57600080fd5b803590602001918460018302840111600160201b8311171561083c57600080fd5b509092509050611ece565b60006001600160a01b03831661088e5760405162461bcd60e51b815260040180806020018281038252602b8152602001806136fc602b913960400191505060405180910390fd5b5060008181526001602090815260408083206001600160a01b03861684529091529020545b92915050565b600083815260046020526040902054806109045760405162461bcd60e51b81526004018080602001828103825260258152602001806136d76025913960400191505060405180910390fd5b60008481526003602052604090205480610962576040805162461bcd60e51b815260206004820152601a60248201527918dbdb991a5d1a5bdb881b9bdd081c1c995c185c9959081e595d60321b604482015290519081900360640190fd5b60006000196001831b01815b85811015610aba57600087878381811061098457fe5b90506020020135905060008111801561099c57508281105b6109e5576040805162461bcd60e51b815260206004820152601560248201527419dbdd081a5b9d985b1a59081a5b99195e081cd95d605a1b604482015290519081900360640190fd5b60006109fb8c6109f68d8d866120aa565b6123d9565b90506000805b87811015610a58576001811b841615610a505760008c81526003602052604090208054610a4d919083908110610a3357fe5b90600052602060002001548361241d90919063ffffffff16565b91505b600101610a01565b506000610a653384610847565b90508015610aaa57610a9d610a908a610a84848663ffffffff61247716565b9063ffffffff6124d016565b889063ffffffff61241d16565b9650610aaa33848361253a565b50506001909201915061096e9050565b508115610ba55787610b81576040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b038b169163a9059cbb9160448083019260209291908290030181600087803b158015610b1557600080fd5b505af1158015610b29573d6000803e3d6000fd5b505050506040513d6020811015610b3f57600080fd5b5051610b7c5760405162461bcd60e51b815260040180806020018281038252602b815260200180613727602b913960400191505060405180910390fd5b610ba5565b610ba533610b8f8b8b6123d9565b84604051806020016040528060008152506125d5565b87896001600160a01b0316336001600160a01b03167f2682012a4a4f1973119f1c9b90745d1bd91fa2bab387344f044cb3586864d18d8a8a8a8860405180858152602001806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f191690920182900397509095505050505050a4505050505050505050565b6001600160e01b03191660009081526020819052604090205460ff1690565b60036020528160005260406000208181548110610c7057fe5b90600052602060002001600091509150505481565b848314610cc35760405162461bcd60e51b815260040180806020018281038252602e815260200180613876602e913960400191505060405180910390fd5b6001600160a01b038716610d085760405162461bcd60e51b81526004018080602001828103825260288152602001806137526028913960400191505060405180910390fd5b6001600160a01b038816331480610d4757506001600160a01b038816600090815260026020908152604080832033845290915290205460ff1615156001145b610d825760405162461bcd60e51b81526004018080602001828103825260388152602001806138a46038913960400191505060405180910390fd5b60005b85811015610eb2576000878783818110610d9b57fe5b9050602002013590506000868684818110610db257fe5b905060200201359050610e04816001600085815260200190815260200160002060008e6001600160a01b03166001600160a01b03168152602001908152602001600020546126c390919063ffffffff16565b6001600084815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002081905550610e876001600084815260200190815260200160002060008c6001600160a01b03166001600160a01b03168152602001908152602001600020548261241d90919063ffffffff16565b60009283526001602081815260408086206001600160a01b038f168752909152909320555001610d85565b50866001600160a01b0316886001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb898989896040518080602001806020018381038352878782818152602001925060200280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600083820152604051601f909101601f19169092018290039850909650505050505050a461100833898989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b91829185019084908082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a915089908190840183828082843760009201919091525061272092505050565b5050505050505050565b600061101e83836123d9565b9392505050565b606081518351146110675760405162461bcd60e51b815260040180806020018281038252602e815260200180613848602e913960400191505060405180910390fd5b60608351604051908082528060200260200182016040528015611094578160200160208202803883390190505b50905060005b84518110156111845760006001600160a01b03168582815181106110ba57fe5b60200260200101516001600160a01b031614156111085760405162461bcd60e51b81526004018080602001828103825260348152602001806137f36034913960400191505060405180910390fd5b6001600085838151811061111857fe5b60200260200101518152602001908152602001600020600086838151811061113c57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061117157fe5b602090810291909101015260010161109a565b509392505050565b600182116111e1576040805162461bcd60e51b815260206004820181905260248201527f676f7420656d707479206f722073696e676c65746f6e20706172746974696f6e604482015290519081900360640190fd5b6000848152600360205260409020548061123f576040805162461bcd60e51b815260206004820152601a60248201527918dbdb991a5d1a5bdb881b9bdd081c1c995c185c9959081e595d60321b604482015290519081900360640190fd5b6040805184815260208086028201019091526000196001831b01908190606090868015611276578160200160208202803883390190505b5090506060878790506040519080825280602002602001820160405280156112a8578160200160208202803883390190505b50905060005b878110156113c05760008989838181106112c457fe5b9050602002013590506000811180156112dc57508581105b611325576040805162461bcd60e51b815260206004820152601560248201527419dbdd081a5b9d985b1a59081a5b99195e081cd95d605a1b604482015290519081900360640190fd5b8085821614611374576040805162461bcd60e51b81526020600482015260166024820152751c185c9d1a5d1a5bdb881b9bdd08191a5cda9bda5b9d60521b604482015290519081900360640190fd5b938418936113878d6109f68e8e856120aa565b84838151811061139357fe5b602002602001018181525050878383815181106113ac57fe5b6020908102919091010152506001016112ae565b50826114a5578961148c57604080516323b872dd60e01b81523360048201523060248201526044810188905290516001600160a01b038d16916323b872dd9160648083019260209291908290030181600087803b15801561142057600080fd5b505af1158015611434573d6000803e3d6000fd5b505050506040513d602081101561144a57600080fd5b50516114875760405162461bcd60e51b81526004018080602001828103825260238152602001806137d06023913960400191505060405180910390fd5b6114a0565b6114a03361149a8d8d6123d9565b8861253a565b6114ba565b6114ba3361149a8d6109f68e8e898b186120aa565b6114d5338383604051806020016040528060008152506128fd565b888a336001600160a01b03167f2e6bb91f8cbcda0c93623c54d0403a43514fabc40084ec96b6d5379a747862988e8c8c8c60405180856001600160a01b03166001600160a01b03168152602001806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f191690920182900397509095505050505050a45050505050505050505050565b6000611580848484612b30565b949350505050565b60006115808484846120aa565b600182116115ea576040805162461bcd60e51b815260206004820181905260248201527f676f7420656d707479206f722073696e676c65746f6e20706172746974696f6e604482015290519081900360640190fd5b60008481526003602052604090205480611648576040805162461bcd60e51b815260206004820152601a60248201527918dbdb991a5d1a5bdb881b9bdd081c1c995c185c9959081e595d60321b604482015290519081900360640190fd5b6040805184815260208086028201019091526000196001831b0190819060609086801561167f578160200160208202803883390190505b5090506060878790506040519080825280602002602001820160405280156116b1578160200160208202803883390190505b50905060005b878110156117c95760008989838181106116cd57fe5b9050602002013590506000811180156116e557508581105b61172e576040805162461bcd60e51b815260206004820152601560248201527419dbdd081a5b9d985b1a59081a5b99195e081cd95d605a1b604482015290519081900360640190fd5b808582161461177d576040805162461bcd60e51b81526020600482015260166024820152751c185c9d1a5d1a5bdb881b9bdd08191a5cda9bda5b9d60521b604482015290519081900360640190fd5b938418936117908d6109f68e8e856120aa565b84838151811061179c57fe5b602002602001018181525050878383815181106117b557fe5b6020908102919091010152506001016116b7565b506117d5338383612b7d565b826118d957896118b0576040805163a9059cbb60e01b81523360048201526024810188905290516001600160a01b038d169163a9059cbb9160448083019260209291908290030181600087803b15801561182e57600080fd5b505af1158015611842573d6000803e3d6000fd5b505050506040513d602081101561185857600080fd5b50516118ab576040805162461bcd60e51b815260206004820181905260248201527f636f756c64206e6f742073656e6420636f6c6c61746572616c20746f6b656e73604482015290519081900360640190fd5b6118d4565b6118d4336118be8d8d6123d9565b88604051806020016040528060008152506125d5565b6118ee565b6118ee336118be8d6109f68e8e898b186120aa565b888a336001600160a01b03167f6f13ca62553fcc2bcd2372180a43949c1e4cebba603901ede2f4e14f36b282ca8e8c8c8c60405180856001600160a01b03166001600160a01b03168152602001806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f191690920182900397509095505050505050a45050505050505050505050565b3360008181526002602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b8060018111611a3a5760405162461bcd60e51b815260040180806020018281038252602a8152602001806138dc602a913960400191505060405180910390fd5b6000611a47338684612b30565b6000818152600360205260409020549091508214611aac576040805162461bcd60e51b815260206004820152601f60248201527f636f6e646974696f6e206e6f74207072657061726564206f7220666f756e6400604482015290519081900360640190fd5b60008181526004602052604090205415611b0d576040805162461bcd60e51b815260206004820152601e60248201527f7061796f75742064656e6f6d696e61746f7220616c7265616479207365740000604482015290519081900360640190fd5b6000805b83811015611bf2576000868683818110611b2757fe5b905060200201359050611b43818461241d90919063ffffffff16565b600085815260036020526040902080549194509083908110611b6157fe5b9060005260206000200154600014611bc0576040805162461bcd60e51b815260206004820152601c60248201527f7061796f7574206e756d657261746f7220616c72656164792073657400000000604482015290519081900360640190fd5b6000848152600360205260409020805482919084908110611bdd57fe5b60009182526020909120015550600101611b11565b5060008111611c3f576040805162461bcd60e51b81526020600482015260146024820152737061796f757420697320616c6c207a65726f657360601b604482015290519081900360640190fd5b60008281526004602090815260408083208490556003825291829020825186815291820183815281549383018490528993339387937fb44d84d3289691f71497564b85d4233648d9dbae8cbdbb4329f301c3a0185894938a93919291606083019084908015611ccd57602002820191906000526020600020905b815481526020019060010190808311611cb9575b5050935050505060405180910390a4505050505050565b60009081526003602052604090205490565b610100811115611d46576040805162461bcd60e51b8152602060048201526016602482015275746f6f206d616e79206f7574636f6d6520736c6f747360501b604482015290519081900360640190fd5b60018111611d855760405162461bcd60e51b815260040180806020018281038252602a8152602001806138dc602a913960400191505060405180910390fd5b6000611d92848484612b30565b60008181526003602052604090205490915015611df6576040805162461bcd60e51b815260206004820152601a60248201527f636f6e646974696f6e20616c7265616479207072657061726564000000000000604482015290519081900360640190fd5b81604051908082528060200260200182016040528015611e20578160200160208202803883390190505b5060008281526003602090815260409091208251611e44939192919091019061366e565b5082846001600160a01b0316827fab3760c3bd2bb38b5bcf54dc79802ed67338b4cf29f3054ded67ed24661e4177856040518082815260200191505060405180910390a450505050565b60046020526000908152604090205481565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b6001600160a01b038516611f135760405162461bcd60e51b81526004018080602001828103825260288152602001806137526028913960400191505060405180910390fd5b6001600160a01b038616331480611f5257506001600160a01b038616600090815260026020908152604080832033845290915290205460ff1615156001145b611f8d5760405162461bcd60e51b81526004018080602001828103825260388152602001806138a46038913960400191505060405180910390fd5b60008481526001602090815260408083206001600160a01b038a168452909152902054611fc0908463ffffffff6126c316565b60008581526001602090815260408083206001600160a01b038b81168552925280832093909355871681522054611ff890849061241d565b60008581526001602090815260408083206001600160a01b03808b16808652918452938290209490945580518881529182018790528051928a169233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a46120a2338787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d6192505050565b505050505050565b6040805160208082018590528183018490528251808303840181526060909201909252805191012060009060ff81901c151582805b60008051602061377a83398151915260018508935060008051602061377a833981519152600360008051602061377a83398151915280878809870908905061212681612ec3565b91508060008051602061377a83398151915283840914156120df5782801561214f575060028206155b806121665750821580156121665750600282066001145b1561217f578160008051602061377a8339815191520391505b8780156123b65760fe81901c151593506001600160fe1b031660008051602061377a833981519152600360008051602061377a83398151915280848509840908915060006121cc83612ec3565b90508480156121dc575060028106155b806121f35750841580156121f35750600281066001145b156122095760008051602061377a833981519152035b8260008051602061377a8339815191528283091461226e576040805162461bcd60e51b815260206004820152601c60248201527f696e76616c696420706172656e7420636f6c6c656374696f6e20494400000000604482015290519081900360640190fd5b6000606060066001600160a01b031688878686604051602001808581526020018481526020018381526020018281526020019450505050506040516020818303038152906040526040518082805190602001908083835b602083106122e45780518252601f1990920191602091820191016122c5565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114612344576040519150601f19603f3d011682016040523d82523d6000602084013e612349565b606091505b50915091508161238f576040805162461bcd60e51b815260206004820152600c60248201526b1958d859190819985a5b195960a21b604482015290519081900360640190fd5b8080602001905160408110156123a457600080fd5b50805160209091015190985095505050505b60028306600114156123cc57600160fe1b851894505b5092979650505050505050565b6040805160609390931b6bffffffffffffffffffffffff19166020808501919091526034808501939093528151808503909301835260549093019052805191012090565b60008282018381101561101e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082612486575060006108b3565b8282028284828161249357fe5b041461101e5760405162461bcd60e51b81526004018080602001828103825260218152602001806138276021913960400191505060405180910390fd5b6000808211612526576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161253157fe5b04949350505050565b60008281526001602090815260408083206001600160a01b038716845290915290205461256d908263ffffffff6126c316565b60008381526001602090815260408083206001600160a01b038816808552908352818420949094558051868152918201859052805192939233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a4505050565b6001600160a01b03841661261a5760405162461bcd60e51b815260040180806020018281038252602181526020018061392d6021913960400191505060405180910390fd5b60008381526001602090815260408083206001600160a01b038816845290915290205461264e90839063ffffffff61241d16565b60008481526001602090815260408083206001600160a01b038916808552908352818420949094558051878152918201869052805133927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a46126bd33600086868686612d61565b50505050565b60008282111561271a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b612732846001600160a01b0316613668565b156120a25760405163bc197c8160e01b8082526001600160a01b0388811660048401908152888216602485015260a060448501908152875160a4860152875193949289169363bc197c81938c938c938b938b938b9392916064820191608481019160c4909101906020808a01910280838360005b838110156127be5781810151838201526020016127a6565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156127fd5781810151838201526020016127e5565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015612839578181015183820152602001612821565b50505050905090810190601f1680156128665780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561288b57600080fd5b505af115801561289f573d6000803e3d6000fd5b505050506040513d60208110156128b557600080fd5b50516001600160e01b031916146120a25760405162461bcd60e51b815260040180806020018281038252603681526020018061379a6036913960400191505060405180910390fd5b6001600160a01b0384166129425760405162461bcd60e51b81526004018080602001828103825260278152602001806139066027913960400191505060405180910390fd5b81518351146129825760405162461bcd60e51b815260040180806020018281038252602e815260200180613876602e913960400191505060405180910390fd5b60005b8351811015612a46576129fd600160008684815181106129a157fe5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b03168152602001908152602001600020548483815181106129e757fe5b602002602001015161241d90919063ffffffff16565b60016000868481518110612a0d57fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a168252909252902055600101612985565b50836001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015612acd578181015183820152602001612ab5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015612b0c578181015183820152602001612af4565b5050505090500194505050505060405180910390a46126bd33600086868686612720565b6040805160609490941b6bffffffffffffffffffffffff19166020808601919091526034850193909352605480850192909252805180850390920182526074909301909252815191012090565b8051825114612bbd5760405162461bcd60e51b815260040180806020018281038252602e815260200180613876602e913960400191505060405180910390fd5b60005b8251811015612c8157612c38828281518110612bd857fe5b602002602001015160016000868581518110612bf057fe5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b03168152602001908152602001600020546126c390919063ffffffff16565b60016000858481518110612c4857fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b0389168252909252902055600101612bc0565b5060006001600160a01b0316836001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8585604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015612d08578181015183820152602001612cf0565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015612d47578181015183820152602001612d2f565b5050505090500194505050505060405180910390a4505050565b612d73846001600160a01b0316613668565b156120a25760405163f23a6e6160e01b8082526001600160a01b03888116600484019081528882166024850152604484018790526064840186905260a060848501908152855160a4860152855193949289169363f23a6e61938c938c938b938b938b93929160c490910190602085019080838360005b83811015612e01578181015183820152602001612de9565b50505050905090810190601f168015612e2e5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612e5157600080fd5b505af1158015612e65573d6000803e3d6000fd5b505050506040513d6020811015612e7b57600080fd5b50516001600160e01b031916146120a25760405162461bcd60e51b815260040180806020018281038252603181526020018061394e6031913960400191505060405180910390fd5b600060008051602061377a833981519152808380099150808283098181820990508181840992508183850993508184840992508183840990508181820982818309905082818209905082818209905082818309915082828609945082858609915082828309915082828509935082848509915082828309915082828309915082828509915082828609945082858609915082828309915082828309915082828609915082828509935082848609945082858609915082828309915082828509935082848509915082828309905082818209905082818209905082818309915082828609945082858509935082848509915082828309915082828309915082828609945082858609915082828309915082828609915082828309915082828309915082828609915082828509935082848509915082828309905082818209905082818309905082818509905082818209905082818209905082818209905082818209905082818309915082828609945082858609915082828609915082828509935082848509915082828509915082828309915082828309905082818309905082818209838182099050838182099050838182099050838182099050838183099150508281830991508282860994508285850993508284850991508282860994508285850993508284860994508285850993508284860994508285860991508282860991508282830991508282850993508284850991508282830991508282860994508285850993508284850991508282850991508282860994508285850993508284860994508285850993508284850991508282830991508282850991508282860994508285860991508282860991508282850993508284860994508285850993508284860994508285850993508284850991508282850991508282830991508282860994508285850993508284850991508282850991508282830991508282860994508285860991508282830990508281820990508281830990508281860990508281820990508281820990508281820990508281820990508281830991508282850993508284860994508285850993508284860994508285860991508282860991508282830991508282830991508282830991508282860991508282850993508284850991508282850991508282830991508282860994508285860991508282860991508282850993508284860994508285860991508282830991508282850993508284860994508285860991508282850993508284860994508285850993508284850991508282850991508282860994508285850993508284850991508282850991508282830991508282830991508282860994508285860991508282830991508282830991508282860991508282850993508284860994508285860991508282860990508281820990508281820990508281830991508282850993508284850991508282860994508285850993508284860994508285850993508284860994508285850993508284850991508282850990508281850991508282830991508282830991508282820991505081818509935081848409925081838509935081848409925081838509935081848509905081818509905081818409925050808284099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808383099392505050565b3b151590565b8280548282559060005260206000209081019282156136a9579160200282015b828111156136a957825182559160200191906001019061368e565b506136b59291506136b9565b5090565b6136d391905b808211156136b557600081556001016136bf565b9056fe726573756c7420666f7220636f6e646974696f6e206e6f7420726563656976656420796574455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373636f756c64206e6f74207472616e73666572207061796f757420746f206d6573736167652073656e646572455243313135353a207461726765742061646472657373206d757374206265206e6f6e2d7a65726f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e4552433131353542617463685265636569766564636f756c64206e6f74207265636569766520636f6c6c61746572616c20746f6b656e73455243313135353a20736f6d65206164647265737320696e2062617463682062616c616e6365207175657279206973207a65726f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77455243313135353a206f776e65727320616e6420494473206d75737420686176652073616d65206c656e67746873455243313135353a2049447320616e642076616c756573206d75737420686176652073616d65206c656e67746873455243313135353a206e656564206f70657261746f7220617070726f76616c20666f7220337264207061727479207472616e73666572732e74686572652073686f756c64206265206d6f7265207468616e206f6e65206f7574636f6d6520736c6f74455243313135353a206261746368206d696e7420746f20746865207a65726f2061646472657373455243313135353a206d696e7420746f20746865207a65726f2061646472657373455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e455243313135355265636569766564a265627a7a72315820d49dab2b950cf3b366255f06404d652fc0f2fa23c05a368e53552f98cdd0b95464736f6c63430005100032\",\n        \"sourceMap\": \"200:15561:1:-;;;718:40:5;-1:-1:-1;;;;;;;;718:18:5;:40;:::i;:::-;894:330:2;-1:-1:-1;;;;;;;;894:18:2;:330;:::i;:::-;200:15561:1;;1442:190:5;-1:-1:-1;;;;;;1517:25:5;;;;;1509:66;;;;;-1:-1:-1;;;1509:66:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1585:33:5;:20;:33;;;;;;;;;;:40;;-1:-1:-1;;1585:40:5;1621:4;1585:40;;;1442:190::o;200:15561:1:-;;;;;;;\",\n        \"linkReferences\": {}\n    },\n    \"deployedBytecode\": {\n        \"object\": \"0x608060405234801561001057600080fd5b50600436106101155760003560e01c8063856296f7116100a2578063d42dc0c211610071578063d42dc0c21461071a578063d96ee75414610737578063dd34de6714610769578063e985e9c514610786578063f242432a146107b457610115565b8063856296f7146105c45780639e7212ad146105ed578063a22cb46514610677578063c49298ac146106a557610115565b80632eb2c2d6116100e95780632eb2c2d61461024257806339dd7530146103695780634e1273f41461039557806372ce427514610508578063852c6ae21461059257610115565b8062fdd58e1461011a57806301b7037c1461015857806301ffc9a7146101e45780630504c8141461021f575b600080fd5b6101466004803603604081101561013057600080fd5b506001600160a01b038135169060200135610847565b60408051918252519081900360200190f35b6101e26004803603608081101561016e57600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b8111156101a457600080fd5b8201836020820111156101b657600080fd5b803590602001918460208302840111600160201b831117156101d757600080fd5b5090925090506108b9565b005b61020b600480360360208110156101fa57600080fd5b50356001600160e01b031916610c38565b604080519115158252519081900360200190f35b6101466004803603604081101561023557600080fd5b5080359060200135610c57565b6101e2600480360360a081101561025857600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561028b57600080fd5b82018360208201111561029d57600080fd5b803590602001918460208302840111600160201b831117156102be57600080fd5b919390929091602081019035600160201b8111156102db57600080fd5b8201836020820111156102ed57600080fd5b803590602001918460208302840111600160201b8311171561030e57600080fd5b919390929091602081019035600160201b81111561032b57600080fd5b82018360208201111561033d57600080fd5b803590602001918460018302840111600160201b8311171561035e57600080fd5b509092509050610c85565b6101466004803603604081101561037f57600080fd5b506001600160a01b038135169060200135611012565b6104b8600480360360408110156103ab57600080fd5b810190602081018135600160201b8111156103c557600080fd5b8201836020820111156103d757600080fd5b803590602001918460208302840111600160201b831117156103f857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561044757600080fd5b82018360208201111561045957600080fd5b803590602001918460208302840111600160201b8311171561047a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611025945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104f45781810151838201526020016104dc565b505050509050019250505060405180910390f35b6101e2600480360360a081101561051e57600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b81111561055457600080fd5b82018360208201111561056657600080fd5b803590602001918460208302840111600160201b8311171561058757600080fd5b91935091503561118c565b610146600480360360608110156105a857600080fd5b506001600160a01b038135169060208101359060400135611573565b610146600480360360608110156105da57600080fd5b5080359060208101359060400135611588565b6101e2600480360360a081101561060357600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b81111561063957600080fd5b82018360208201111561064b57600080fd5b803590602001918460208302840111600160201b8311171561066c57600080fd5b919350915035611595565b6101e26004803603604081101561068d57600080fd5b506001600160a01b038135169060200135151561198c565b6101e2600480360360408110156106bb57600080fd5b81359190810190604081016020820135600160201b8111156106dc57600080fd5b8201836020820111156106ee57600080fd5b803590602001918460208302840111600160201b8311171561070f57600080fd5b5090925090506119fa565b6101466004803603602081101561073057600080fd5b5035611ce4565b6101e26004803603606081101561074d57600080fd5b506001600160a01b038135169060208101359060400135611cf6565b6101466004803603602081101561077f57600080fd5b5035611e8e565b61020b6004803603604081101561079c57600080fd5b506001600160a01b0381358116916020013516611ea0565b6101e2600480360360a08110156107ca57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561080957600080fd5b82018360208201111561081b57600080fd5b803590602001918460018302840111600160201b8311171561083c57600080fd5b509092509050611ece565b60006001600160a01b03831661088e5760405162461bcd60e51b815260040180806020018281038252602b8152602001806136fc602b913960400191505060405180910390fd5b5060008181526001602090815260408083206001600160a01b03861684529091529020545b92915050565b600083815260046020526040902054806109045760405162461bcd60e51b81526004018080602001828103825260258152602001806136d76025913960400191505060405180910390fd5b60008481526003602052604090205480610962576040805162461bcd60e51b815260206004820152601a60248201527918dbdb991a5d1a5bdb881b9bdd081c1c995c185c9959081e595d60321b604482015290519081900360640190fd5b60006000196001831b01815b85811015610aba57600087878381811061098457fe5b90506020020135905060008111801561099c57508281105b6109e5576040805162461bcd60e51b815260206004820152601560248201527419dbdd081a5b9d985b1a59081a5b99195e081cd95d605a1b604482015290519081900360640190fd5b60006109fb8c6109f68d8d866120aa565b6123d9565b90506000805b87811015610a58576001811b841615610a505760008c81526003602052604090208054610a4d919083908110610a3357fe5b90600052602060002001548361241d90919063ffffffff16565b91505b600101610a01565b506000610a653384610847565b90508015610aaa57610a9d610a908a610a84848663ffffffff61247716565b9063ffffffff6124d016565b889063ffffffff61241d16565b9650610aaa33848361253a565b50506001909201915061096e9050565b508115610ba55787610b81576040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b038b169163a9059cbb9160448083019260209291908290030181600087803b158015610b1557600080fd5b505af1158015610b29573d6000803e3d6000fd5b505050506040513d6020811015610b3f57600080fd5b5051610b7c5760405162461bcd60e51b815260040180806020018281038252602b815260200180613727602b913960400191505060405180910390fd5b610ba5565b610ba533610b8f8b8b6123d9565b84604051806020016040528060008152506125d5565b87896001600160a01b0316336001600160a01b03167f2682012a4a4f1973119f1c9b90745d1bd91fa2bab387344f044cb3586864d18d8a8a8a8860405180858152602001806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f191690920182900397509095505050505050a4505050505050505050565b6001600160e01b03191660009081526020819052604090205460ff1690565b60036020528160005260406000208181548110610c7057fe5b90600052602060002001600091509150505481565b848314610cc35760405162461bcd60e51b815260040180806020018281038252602e815260200180613876602e913960400191505060405180910390fd5b6001600160a01b038716610d085760405162461bcd60e51b81526004018080602001828103825260288152602001806137526028913960400191505060405180910390fd5b6001600160a01b038816331480610d4757506001600160a01b038816600090815260026020908152604080832033845290915290205460ff1615156001145b610d825760405162461bcd60e51b81526004018080602001828103825260388152602001806138a46038913960400191505060405180910390fd5b60005b85811015610eb2576000878783818110610d9b57fe5b9050602002013590506000868684818110610db257fe5b905060200201359050610e04816001600085815260200190815260200160002060008e6001600160a01b03166001600160a01b03168152602001908152602001600020546126c390919063ffffffff16565b6001600084815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002081905550610e876001600084815260200190815260200160002060008c6001600160a01b03166001600160a01b03168152602001908152602001600020548261241d90919063ffffffff16565b60009283526001602081815260408086206001600160a01b038f168752909152909320555001610d85565b50866001600160a01b0316886001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb898989896040518080602001806020018381038352878782818152602001925060200280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600083820152604051601f909101601f19169092018290039850909650505050505050a461100833898989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b91829185019084908082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a915089908190840183828082843760009201919091525061272092505050565b5050505050505050565b600061101e83836123d9565b9392505050565b606081518351146110675760405162461bcd60e51b815260040180806020018281038252602e815260200180613848602e913960400191505060405180910390fd5b60608351604051908082528060200260200182016040528015611094578160200160208202803883390190505b50905060005b84518110156111845760006001600160a01b03168582815181106110ba57fe5b60200260200101516001600160a01b031614156111085760405162461bcd60e51b81526004018080602001828103825260348152602001806137f36034913960400191505060405180910390fd5b6001600085838151811061111857fe5b60200260200101518152602001908152602001600020600086838151811061113c57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061117157fe5b602090810291909101015260010161109a565b509392505050565b600182116111e1576040805162461bcd60e51b815260206004820181905260248201527f676f7420656d707479206f722073696e676c65746f6e20706172746974696f6e604482015290519081900360640190fd5b6000848152600360205260409020548061123f576040805162461bcd60e51b815260206004820152601a60248201527918dbdb991a5d1a5bdb881b9bdd081c1c995c185c9959081e595d60321b604482015290519081900360640190fd5b6040805184815260208086028201019091526000196001831b01908190606090868015611276578160200160208202803883390190505b5090506060878790506040519080825280602002602001820160405280156112a8578160200160208202803883390190505b50905060005b878110156113c05760008989838181106112c457fe5b9050602002013590506000811180156112dc57508581105b611325576040805162461bcd60e51b815260206004820152601560248201527419dbdd081a5b9d985b1a59081a5b99195e081cd95d605a1b604482015290519081900360640190fd5b8085821614611374576040805162461bcd60e51b81526020600482015260166024820152751c185c9d1a5d1a5bdb881b9bdd08191a5cda9bda5b9d60521b604482015290519081900360640190fd5b938418936113878d6109f68e8e856120aa565b84838151811061139357fe5b602002602001018181525050878383815181106113ac57fe5b6020908102919091010152506001016112ae565b50826114a5578961148c57604080516323b872dd60e01b81523360048201523060248201526044810188905290516001600160a01b038d16916323b872dd9160648083019260209291908290030181600087803b15801561142057600080fd5b505af1158015611434573d6000803e3d6000fd5b505050506040513d602081101561144a57600080fd5b50516114875760405162461bcd60e51b81526004018080602001828103825260238152602001806137d06023913960400191505060405180910390fd5b6114a0565b6114a03361149a8d8d6123d9565b8861253a565b6114ba565b6114ba3361149a8d6109f68e8e898b186120aa565b6114d5338383604051806020016040528060008152506128fd565b888a336001600160a01b03167f2e6bb91f8cbcda0c93623c54d0403a43514fabc40084ec96b6d5379a747862988e8c8c8c60405180856001600160a01b03166001600160a01b03168152602001806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f191690920182900397509095505050505050a45050505050505050505050565b6000611580848484612b30565b949350505050565b60006115808484846120aa565b600182116115ea576040805162461bcd60e51b815260206004820181905260248201527f676f7420656d707479206f722073696e676c65746f6e20706172746974696f6e604482015290519081900360640190fd5b60008481526003602052604090205480611648576040805162461bcd60e51b815260206004820152601a60248201527918dbdb991a5d1a5bdb881b9bdd081c1c995c185c9959081e595d60321b604482015290519081900360640190fd5b6040805184815260208086028201019091526000196001831b0190819060609086801561167f578160200160208202803883390190505b5090506060878790506040519080825280602002602001820160405280156116b1578160200160208202803883390190505b50905060005b878110156117c95760008989838181106116cd57fe5b9050602002013590506000811180156116e557508581105b61172e576040805162461bcd60e51b815260206004820152601560248201527419dbdd081a5b9d985b1a59081a5b99195e081cd95d605a1b604482015290519081900360640190fd5b808582161461177d576040805162461bcd60e51b81526020600482015260166024820152751c185c9d1a5d1a5bdb881b9bdd08191a5cda9bda5b9d60521b604482015290519081900360640190fd5b938418936117908d6109f68e8e856120aa565b84838151811061179c57fe5b602002602001018181525050878383815181106117b557fe5b6020908102919091010152506001016116b7565b506117d5338383612b7d565b826118d957896118b0576040805163a9059cbb60e01b81523360048201526024810188905290516001600160a01b038d169163a9059cbb9160448083019260209291908290030181600087803b15801561182e57600080fd5b505af1158015611842573d6000803e3d6000fd5b505050506040513d602081101561185857600080fd5b50516118ab576040805162461bcd60e51b815260206004820181905260248201527f636f756c64206e6f742073656e6420636f6c6c61746572616c20746f6b656e73604482015290519081900360640190fd5b6118d4565b6118d4336118be8d8d6123d9565b88604051806020016040528060008152506125d5565b6118ee565b6118ee336118be8d6109f68e8e898b186120aa565b888a336001600160a01b03167f6f13ca62553fcc2bcd2372180a43949c1e4cebba603901ede2f4e14f36b282ca8e8c8c8c60405180856001600160a01b03166001600160a01b03168152602001806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f191690920182900397509095505050505050a45050505050505050505050565b3360008181526002602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b8060018111611a3a5760405162461bcd60e51b815260040180806020018281038252602a8152602001806138dc602a913960400191505060405180910390fd5b6000611a47338684612b30565b6000818152600360205260409020549091508214611aac576040805162461bcd60e51b815260206004820152601f60248201527f636f6e646974696f6e206e6f74207072657061726564206f7220666f756e6400604482015290519081900360640190fd5b60008181526004602052604090205415611b0d576040805162461bcd60e51b815260206004820152601e60248201527f7061796f75742064656e6f6d696e61746f7220616c7265616479207365740000604482015290519081900360640190fd5b6000805b83811015611bf2576000868683818110611b2757fe5b905060200201359050611b43818461241d90919063ffffffff16565b600085815260036020526040902080549194509083908110611b6157fe5b9060005260206000200154600014611bc0576040805162461bcd60e51b815260206004820152601c60248201527f7061796f7574206e756d657261746f7220616c72656164792073657400000000604482015290519081900360640190fd5b6000848152600360205260409020805482919084908110611bdd57fe5b60009182526020909120015550600101611b11565b5060008111611c3f576040805162461bcd60e51b81526020600482015260146024820152737061796f757420697320616c6c207a65726f657360601b604482015290519081900360640190fd5b60008281526004602090815260408083208490556003825291829020825186815291820183815281549383018490528993339387937fb44d84d3289691f71497564b85d4233648d9dbae8cbdbb4329f301c3a0185894938a93919291606083019084908015611ccd57602002820191906000526020600020905b815481526020019060010190808311611cb9575b5050935050505060405180910390a4505050505050565b60009081526003602052604090205490565b610100811115611d46576040805162461bcd60e51b8152602060048201526016602482015275746f6f206d616e79206f7574636f6d6520736c6f747360501b604482015290519081900360640190fd5b60018111611d855760405162461bcd60e51b815260040180806020018281038252602a8152602001806138dc602a913960400191505060405180910390fd5b6000611d92848484612b30565b60008181526003602052604090205490915015611df6576040805162461bcd60e51b815260206004820152601a60248201527f636f6e646974696f6e20616c7265616479207072657061726564000000000000604482015290519081900360640190fd5b81604051908082528060200260200182016040528015611e20578160200160208202803883390190505b5060008281526003602090815260409091208251611e44939192919091019061366e565b5082846001600160a01b0316827fab3760c3bd2bb38b5bcf54dc79802ed67338b4cf29f3054ded67ed24661e4177856040518082815260200191505060405180910390a450505050565b60046020526000908152604090205481565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b6001600160a01b038516611f135760405162461bcd60e51b81526004018080602001828103825260288152602001806137526028913960400191505060405180910390fd5b6001600160a01b038616331480611f5257506001600160a01b038616600090815260026020908152604080832033845290915290205460ff1615156001145b611f8d5760405162461bcd60e51b81526004018080602001828103825260388152602001806138a46038913960400191505060405180910390fd5b60008481526001602090815260408083206001600160a01b038a168452909152902054611fc0908463ffffffff6126c316565b60008581526001602090815260408083206001600160a01b038b81168552925280832093909355871681522054611ff890849061241d565b60008581526001602090815260408083206001600160a01b03808b16808652918452938290209490945580518881529182018790528051928a169233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a46120a2338787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d6192505050565b505050505050565b6040805160208082018590528183018490528251808303840181526060909201909252805191012060009060ff81901c151582805b60008051602061377a83398151915260018508935060008051602061377a833981519152600360008051602061377a83398151915280878809870908905061212681612ec3565b91508060008051602061377a83398151915283840914156120df5782801561214f575060028206155b806121665750821580156121665750600282066001145b1561217f578160008051602061377a8339815191520391505b8780156123b65760fe81901c151593506001600160fe1b031660008051602061377a833981519152600360008051602061377a83398151915280848509840908915060006121cc83612ec3565b90508480156121dc575060028106155b806121f35750841580156121f35750600281066001145b156122095760008051602061377a833981519152035b8260008051602061377a8339815191528283091461226e576040805162461bcd60e51b815260206004820152601c60248201527f696e76616c696420706172656e7420636f6c6c656374696f6e20494400000000604482015290519081900360640190fd5b6000606060066001600160a01b031688878686604051602001808581526020018481526020018381526020018281526020019450505050506040516020818303038152906040526040518082805190602001908083835b602083106122e45780518252601f1990920191602091820191016122c5565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114612344576040519150601f19603f3d011682016040523d82523d6000602084013e612349565b606091505b50915091508161238f576040805162461bcd60e51b815260206004820152600c60248201526b1958d859190819985a5b195960a21b604482015290519081900360640190fd5b8080602001905160408110156123a457600080fd5b50805160209091015190985095505050505b60028306600114156123cc57600160fe1b851894505b5092979650505050505050565b6040805160609390931b6bffffffffffffffffffffffff19166020808501919091526034808501939093528151808503909301835260549093019052805191012090565b60008282018381101561101e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082612486575060006108b3565b8282028284828161249357fe5b041461101e5760405162461bcd60e51b81526004018080602001828103825260218152602001806138276021913960400191505060405180910390fd5b6000808211612526576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161253157fe5b04949350505050565b60008281526001602090815260408083206001600160a01b038716845290915290205461256d908263ffffffff6126c316565b60008381526001602090815260408083206001600160a01b038816808552908352818420949094558051868152918201859052805192939233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a4505050565b6001600160a01b03841661261a5760405162461bcd60e51b815260040180806020018281038252602181526020018061392d6021913960400191505060405180910390fd5b60008381526001602090815260408083206001600160a01b038816845290915290205461264e90839063ffffffff61241d16565b60008481526001602090815260408083206001600160a01b038916808552908352818420949094558051878152918201869052805133927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a46126bd33600086868686612d61565b50505050565b60008282111561271a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b612732846001600160a01b0316613668565b156120a25760405163bc197c8160e01b8082526001600160a01b0388811660048401908152888216602485015260a060448501908152875160a4860152875193949289169363bc197c81938c938c938b938b938b9392916064820191608481019160c4909101906020808a01910280838360005b838110156127be5781810151838201526020016127a6565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156127fd5781810151838201526020016127e5565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015612839578181015183820152602001612821565b50505050905090810190601f1680156128665780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561288b57600080fd5b505af115801561289f573d6000803e3d6000fd5b505050506040513d60208110156128b557600080fd5b50516001600160e01b031916146120a25760405162461bcd60e51b815260040180806020018281038252603681526020018061379a6036913960400191505060405180910390fd5b6001600160a01b0384166129425760405162461bcd60e51b81526004018080602001828103825260278152602001806139066027913960400191505060405180910390fd5b81518351146129825760405162461bcd60e51b815260040180806020018281038252602e815260200180613876602e913960400191505060405180910390fd5b60005b8351811015612a46576129fd600160008684815181106129a157fe5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b03168152602001908152602001600020548483815181106129e757fe5b602002602001015161241d90919063ffffffff16565b60016000868481518110612a0d57fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a168252909252902055600101612985565b50836001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015612acd578181015183820152602001612ab5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015612b0c578181015183820152602001612af4565b5050505090500194505050505060405180910390a46126bd33600086868686612720565b6040805160609490941b6bffffffffffffffffffffffff19166020808601919091526034850193909352605480850192909252805180850390920182526074909301909252815191012090565b8051825114612bbd5760405162461bcd60e51b815260040180806020018281038252602e815260200180613876602e913960400191505060405180910390fd5b60005b8251811015612c8157612c38828281518110612bd857fe5b602002602001015160016000868581518110612bf057fe5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b03168152602001908152602001600020546126c390919063ffffffff16565b60016000858481518110612c4857fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b0389168252909252902055600101612bc0565b5060006001600160a01b0316836001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8585604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015612d08578181015183820152602001612cf0565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015612d47578181015183820152602001612d2f565b5050505090500194505050505060405180910390a4505050565b612d73846001600160a01b0316613668565b156120a25760405163f23a6e6160e01b8082526001600160a01b03888116600484019081528882166024850152604484018790526064840186905260a060848501908152855160a4860152855193949289169363f23a6e61938c938c938b938b938b93929160c490910190602085019080838360005b83811015612e01578181015183820152602001612de9565b50505050905090810190601f168015612e2e5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612e5157600080fd5b505af1158015612e65573d6000803e3d6000fd5b505050506040513d6020811015612e7b57600080fd5b50516001600160e01b031916146120a25760405162461bcd60e51b815260040180806020018281038252603181526020018061394e6031913960400191505060405180910390fd5b600060008051602061377a833981519152808380099150808283098181820990508181840992508183850993508184840992508183840990508181820982818309905082818209905082818209905082818309915082828609945082858609915082828309915082828509935082848509915082828309915082828309915082828509915082828609945082858609915082828309915082828309915082828609915082828509935082848609945082858609915082828309915082828509935082848509915082828309905082818209905082818209905082818309915082828609945082858509935082848509915082828309915082828309915082828609945082858609915082828309915082828609915082828309915082828309915082828609915082828509935082848509915082828309905082818209905082818309905082818509905082818209905082818209905082818209905082818209905082818309915082828609945082858609915082828609915082828509935082848509915082828509915082828309915082828309905082818309905082818209838182099050838182099050838182099050838182099050838183099150508281830991508282860994508285850993508284850991508282860994508285850993508284860994508285850993508284860994508285860991508282860991508282830991508282850993508284850991508282830991508282860994508285850993508284850991508282850991508282860994508285850993508284860994508285850993508284850991508282830991508282850991508282860994508285860991508282860991508282850993508284860994508285850993508284860994508285850993508284850991508282850991508282830991508282860994508285850993508284850991508282850991508282830991508282860994508285860991508282830990508281820990508281830990508281860990508281820990508281820990508281820990508281820990508281830991508282850993508284860994508285850993508284860994508285860991508282860991508282830991508282830991508282830991508282860991508282850993508284850991508282850991508282830991508282860994508285860991508282860991508282850993508284860994508285860991508282830991508282850993508284860994508285860991508282850993508284860994508285850993508284850991508282850991508282860994508285850993508284850991508282850991508282830991508282830991508282860994508285860991508282830991508282830991508282860991508282850993508284860994508285860991508282860990508281820990508281820990508281830991508282850993508284850991508282860994508285850993508284860994508285850993508284860994508285850993508284850991508282850990508281850991508282830991508282830991508282820991505081818509935081848409925081838509935081848409925081838509935081848509905081818509905081818409925050808284099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808383099392505050565b3b151590565b8280548282559060005260206000209081019282156136a9579160200282015b828111156136a957825182559160200191906001019061368e565b506136b59291506136b9565b5090565b6136d391905b808211156136b557600081556001016136bf565b9056fe726573756c7420666f7220636f6e646974696f6e206e6f7420726563656976656420796574455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373636f756c64206e6f74207472616e73666572207061796f757420746f206d6573736167652073656e646572455243313135353a207461726765742061646472657373206d757374206265206e6f6e2d7a65726f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e4552433131353542617463685265636569766564636f756c64206e6f74207265636569766520636f6c6c61746572616c20746f6b656e73455243313135353a20736f6d65206164647265737320696e2062617463682062616c616e6365207175657279206973207a65726f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77455243313135353a206f776e65727320616e6420494473206d75737420686176652073616d65206c656e67746873455243313135353a2049447320616e642076616c756573206d75737420686176652073616d65206c656e67746873455243313135353a206e656564206f70657261746f7220617070726f76616c20666f7220337264207061727479207472616e73666572732e74686572652073686f756c64206265206d6f7265207468616e206f6e65206f7574636f6d6520736c6f74455243313135353a206261746368206d696e7420746f20746865207a65726f2061646472657373455243313135353a206d696e7420746f20746865207a65726f2061646472657373455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e455243313135355265636569766564a265627a7a72315820d49dab2b950cf3b366255f06404d652fc0f2fa23c05a368e53552f98cdd0b95464736f6c63430005100032\",\n        \"sourceMap\": \"200:15561:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;200:15561:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1481:205:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1481:205:2;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11764:1857:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;11764:1857:1;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;11764:1857:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11764:1857:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;11764:1857:1;;-1:-1:-1;11764:1857:1;-1:-1:-1;11764:1857:1;:::i;:::-;;915:133:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;915:133:5;-1:-1:-1;;;;;;915:133:5;;:::i;:::-;;;;;;;;;;;;;;;;;;2587:50:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2587:50:1;;;;;;;:::i;5265:971:2:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;5265:971:2;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5265:971:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5265:971:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;5265:971:2;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5265:971:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5265:971:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;5265:971:2;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5265:971:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5265:971:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;5265:971:2;;-1:-1:-1;5265:971:2;-1:-1:-1;5265:971:2;:::i;15583:176:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15583:176:1;;;;;;;;:::i;1921:594:2:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1921:594:2;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;1921:594:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1921:594:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;1921:594:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1921:594:2;;;;;;;;-1:-1:-1;1921:594:2;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;1921:594:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1921:594:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;1921:594:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1921:594:2;;-1:-1:-1;1921:594:2;;-1:-1:-1;;;;;1921:594:2:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1921:594:2;;;;;;;;;;;;;;;;;6951:2724:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;6951:2724:1;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6951:2724:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6951:2724:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;6951:2724:1;;-1:-1:-1;6951:2724:1;-1:-1:-1;6951:2724:1;;:::i;14410:201::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14410:201:1;;;;;;;;;;;;;:::i;15056:213::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15056:213:1;;;;;;;;;;;;:::i;9681:2077::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;9681:2077:1;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;9681:2077:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9681:2077:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;9681:2077:1;;-1:-1:-1;9681:2077:1;-1:-1:-1;9681:2077:1;;:::i;2804:198:2:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2804:198:2;;;;;;;;;;:::i;4489:1121:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4489:1121:1;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;4489:1121:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4489:1121:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;4489:1121:1;;-1:-1:-1;4489:1121:1;-1:-1:-1;4489:1121:1;:::i;13849:139::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13849:139:1;;:::i;3263:681::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3263:681:1;;;;;;;;;;;;;:::i;2795:49::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2795:49:1;;:::i;3279:147:2:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3279:147:2;;;;;;;;;;:::i;3980:696::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;3980:696:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;3980:696:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3980:696:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;3980:696:2;;-1:-1:-1;3980:696:2;-1:-1:-1;3980:696:2;:::i;1481:205::-;1548:7;-1:-1:-1;;;;;1575:19:2;;1567:75;;;;-1:-1:-1;;;1567:75:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1659:13:2;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;1659:20:2;;;;;;;;;;1481:205;;;;;:::o;11764:1857:1:-;11908:8;11919:30;;;:17;:30;;;;;;11967:7;11959:57;;;;-1:-1:-1;;;11959:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12026:21;12050:29;;;:16;:29;;;;;:36;12104:20;12096:59;;;;;-1:-1:-1;;;12096:59:1;;;;;;;;;;;;-1:-1:-1;;;12096:59:1;;;;;;;;;;;;;;;12166:16;-1:-1:-1;;12243:1:1;12218:21;;12217:27;12166:16;12254:878;12271:20;;;12254:878;;;12312:13;12328:9;;12338:1;12328:12;;;;;;;;;;;;;12312:28;;12373:1;12362:8;:12;:39;;;;;12389:12;12378:8;:23;12362:39;12354:73;;;;;-1:-1:-1;;;12354:73:1;;;;;;;;;;;;-1:-1:-1;;;12354:73:1;;;;;;;;;;;;;;;12441:15;12459:126;12483:15;12516:68;12542:18;12562:11;12575:8;12516:25;:68::i;:::-;12459:23;:126::i;:::-;12441:144;-1:-1:-1;12600:20:1;;12638:218;12659:16;12655:1;:20;12638:218;;;12716:1;:6;;12704:19;;:24;12700:142;;12790:29;;;;:16;:29;;;;;:32;;12770:53;;12790:29;12820:1;;12790:32;;;;;;;;;;;;;;12770:15;:19;;:53;;;;:::i;:::-;12752:71;;12700:142;12677:3;;12638:218;;;;12870:16;12889:33;12899:10;12911;12889:9;:33::i;:::-;12870:52;-1:-1:-1;12940:15:1;;12936:186;;12989:58;13005:41;13042:3;13005:32;:11;13021:15;13005:32;:15;:32;:::i;:::-;:36;:41;:36;:41;:::i;:::-;12989:11;;:58;:15;:58;:::i;:::-;12975:72;;13065:42;13071:10;13083;13095:11;13065:5;:42::i;:::-;-1:-1:-1;;12293:3:1;;;;;-1:-1:-1;12254:878:1;;-1:-1:-1;12254:878:1;;-1:-1:-1;13146:15:1;;13142:356;;13181:32;13177:311;;13241:49;;;-1:-1:-1;;;13241:49:1;;13266:10;13241:49;;;;;;;;;;;;-1:-1:-1;;;;;13241:24:1;;;;;:49;;;;;;;;;;;;;;-1:-1:-1;13241:24:1;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;13241:49:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13241:49:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13241:49:1;13233:105;;;;-1:-1:-1;;;13233:105:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13177:311;;;13377:96;13383:10;13395:60;13419:15;13436:18;13395:23;:60::i;:::-;13457:11;13377:96;;;;;;;;;;;;:5;:96::i;:::-;13558:18;13541:15;-1:-1:-1;;;;;13512:102:1;13529:10;-1:-1:-1;;;;;13512:102:1;;13578:11;13591:9;;13602:11;13512:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;13512:102:1;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;13512:102:1;;;;-1:-1:-1;13512:102:1;;-1:-1:-1;;;;;;13512:102:1;11764:1857;;;;;;;;;:::o;915:133:5:-;-1:-1:-1;;;;;;1008:33:5;985:4;1008:33;;;;;;;;;;;;;;915:133::o;2587:50:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5265:971:2:-;5479:27;;;5471:86;;;;-1:-1:-1;;;5471:86:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5575:16:2;;5567:69;;;;-1:-1:-1;;;5567:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5667:18:2;;5675:10;5667:18;;:66;;-1:-1:-1;;;;;;5689:24:2;;;;;;:18;:24;;;;;;;;5714:10;5689:36;;;;;;;;;;:44;;:36;:44;5667:66;5646:169;;;;-1:-1:-1;;;5646:169:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5831:9;5826:253;5846:14;;;5826:253;;;5881:10;5894:3;;5898:1;5894:6;;;;;;;;;;;;;5881:19;;5914:13;5930:6;;5937:1;5930:9;;;;;;;;;;;;;5914:25;;5976:30;6000:5;5976:9;:13;5986:2;5976:13;;;;;;;;;;;:19;5990:4;-1:-1:-1;;;;;5976:19:2;-1:-1:-1;;;;;5976:19:2;;;;;;;;;;;;;:23;;:30;;;;:::i;:::-;5954:9;:13;5964:2;5954:13;;;;;;;;;;;:19;5968:4;-1:-1:-1;;;;;5954:19:2;-1:-1:-1;;;;;5954:19:2;;;;;;;;;;;;:52;;;;6040:28;6050:9;:13;6060:2;6050:13;;;;;;;;;;;:17;6064:2;-1:-1:-1;;;;;6050:17:2;-1:-1:-1;;;;;6050:17:2;;;;;;;;;;;;;6040:5;:9;;:28;;;;:::i;:::-;6020:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;6020:17:2;;;;;;;;;;:48;-1:-1:-1;5862:3:2;5826:253;;;;6126:2;-1:-1:-1;;;;;6094:48:2;6120:4;-1:-1:-1;;;;;6094:48:2;6108:10;-1:-1:-1;;;;;6094:48:2;;6130:3;;6135:6;;6094:48;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;6094:48:2;;;;;;;;;;;;;-1:-1:-1;6094:48:2;;;;;;;1:33:-1;99:1;81:16;;;74:27;6094:48:2;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;6094:48:2;;;;-1:-1:-1;6094:48:2;;-1:-1:-1;;;;;;;6094:48:2;6153:76;6189:10;6201:4;6207:2;6211:3;;6153:76;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;6153:76:2;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6216:6:2;;-1:-1:-1;6216:6:2;;;;6153:76;;;6216:6;;6153:76;6216:6;6153:76;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;;6153:76:2;;;;137:4:-1;6153:76:2;;;;;;;;;;;;;;;;;;-1:-1:-1;6224:4:2;;-1:-1:-1;6224:4:2;;;;6153:76;;6224:4;;;;6153:76;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;6153:35:2;;-1:-1:-1;;;6153:76:2:i;:::-;5265:971;;;;;;;;:::o;15583:176:1:-;15675:4;15698:54;15722:15;15739:12;15698:23;:54::i;:::-;15691:61;15583:176;-1:-1:-1;;;15583:176:1:o;1921:594:2:-;2059:16;2116:3;:10;2099:6;:13;:27;2091:86;;;;-1:-1:-1;;;2091:86:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2188:30;2235:6;:13;2221:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;2221:28:2;-1:-1:-1;2188:61:2;-1:-1:-1;2265:9:2;2260:218;2284:6;:13;2280:1;:17;2260:218;;;2347:1;-1:-1:-1;;;;;2326:23:2;:6;2333:1;2326:9;;;;;;;;;;;;;;-1:-1:-1;;;;;2326:23:2;;;2318:88;;;;-1:-1:-1;;;2318:88:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2439:9;:17;2449:3;2453:1;2449:6;;;;;;;;;;;;;;2439:17;;;;;;;;;;;:28;2457:6;2464:1;2457:9;;;;;;;;;;;;;;-1:-1:-1;;;;;2439:28:2;-1:-1:-1;;;;;2439:28:2;;;;;;;;;;;;;2420:13;2434:1;2420:16;;;;;;;;;;;;;;;;;:47;2299:3;;2260:218;;;-1:-1:-1;2495:13:2;1921:594;-1:-1:-1;;;1921:594:2:o;6951:2724:1:-;7179:1;7160:20;;7152:65;;;;;-1:-1:-1;;;7152:65:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7227:21;7251:29;;;:16;:29;;;;;:36;7305:20;7297:59;;;;;-1:-1:-1;;;7297:59:1;;;;;;;;;;;;-1:-1:-1;;;7297:59:1;;;;;;;;;;;;;;;7751:28;;;;;;;;;;;;;;;;-1:-1:-1;;7501:1:1;7476:21;;7475:27;;;;7723:25;;7762:9;7751:28;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;7751:28:1;;7723:56;;7789:21;7824:9;;:16;;7813:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;7813:28:1;-1:-1:-1;7789:52:1;-1:-1:-1;7856:6:1;7851:482;7868:20;;;7851:482;;;7909:13;7925:9;;7935:1;7925:12;;;;;;;;;;;;;7909:28;;7970:1;7959:8;:12;:39;;;;;7986:12;7975:8;:23;7959:39;7951:73;;;;;-1:-1:-1;;;7951:73:1;;;;;;;;;;;;-1:-1:-1;;;7951:73:1;;;;;;;;;;;;;;;8075:8;8058:12;8047:8;:23;8046:37;8038:72;;;;;-1:-1:-1;;;8038:72:1;;;;;;;;;;;;-1:-1:-1;;;8038:72:1;;;;;;;;;;;;;;;8124:24;;;;8179:110;8203:15;8220:68;8246:18;8266:11;8140:8;8220:25;:68::i;8179:110::-;8162:11;8174:1;8162:14;;;;;;;;;;;;;:127;;;;;8316:6;8303:7;8311:1;8303:10;;;;;;;;;;;;;;;;;:19;-1:-1:-1;7890:3:1;;7851:482;;;-1:-1:-1;8347:17:1;8343:1048;;8470:32;8466:386;;8530:63;;;-1:-1:-1;;;8530:63:1;;8559:10;8530:63;;;;8579:4;8530:63;;;;;;;;;;;;-1:-1:-1;;;;;8530:28:1;;;;;:63;;;;;;;;;;;;;;-1:-1:-1;8530:28:1;:63;;;5:2:-1;;;;30:1;27;20:12;5:2;8530:63:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8530:63:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8530:63:1;8522:111;;;;-1:-1:-1;;;8522:111:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8466:386;;;8672:165;8699:10;8731:60;8755:15;8772:18;8731:23;:60::i;:::-;8813:6;8672:5;:165::i;:::-;8343:1048;;;9142:238;9165:10;9193:149;9217:15;9254:87;9280:18;9300:11;9328:12;9313;:27;9254:25;:87::i;9142:238::-;9401:158;9425:10;9501:11;9526:7;9401:158;;;;;;;;;;;;:10;:158::i;:::-;9637:11;9617:18;9588:10;-1:-1:-1;;;;;9574:94:1;;9600:15;9650:9;;9661:6;9574:94;;;;-1:-1:-1;;;;;9574:94:1;-1:-1:-1;;;;;9574:94:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;9574:94:1;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;9574:94:1;;;;-1:-1:-1;9574:94:1;;-1:-1:-1;;;;;;9574:94:1;6951:2724;;;;;;;;;;;:::o;14410:201::-;14516:7;14542:62;14567:6;14575:10;14587:16;14542:24;:62::i;:::-;14535:69;14410:201;-1:-1:-1;;;;14410:201:1:o;15056:213::-;15168:7;15194:68;15220:18;15240:11;15253:8;15194:25;:68::i;9681:2077::-;9910:1;9891:20;;9883:65;;;;;-1:-1:-1;;;9883:65:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9958:21;9982:29;;;:16;:29;;;;;:36;10036:20;10028:59;;;;;-1:-1:-1;;;10028:59:1;;;;;;;;;;;;-1:-1:-1;;;10028:59:1;;;;;;;;;;;;;;;10225:28;;;;;;;;;;;;;;;;-1:-1:-1;;10144:1:1;10119:21;;10118:27;;;;10197:25;;10236:9;10225:28;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10225:28:1;;10197:56;;10263:21;10298:9;;:16;;10287:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10287:28:1;-1:-1:-1;10263:52:1;-1:-1:-1;10330:6:1;10325:482;10342:20;;;10325:482;;;10383:13;10399:9;;10409:1;10399:12;;;;;;;;;;;;;10383:28;;10444:1;10433:8;:12;:39;;;;;10460:12;10449:8;:23;10433:39;10425:73;;;;;-1:-1:-1;;;10425:73:1;;;;;;;;;;;;-1:-1:-1;;;10425:73:1;;;;;;;;;;;;;;;10549:8;10532:12;10521:8;:23;10520:37;10512:72;;;;;-1:-1:-1;;;10512:72:1;;;;;;;;;;;;-1:-1:-1;;;10512:72:1;;;;;;;;;;;;;;;10598:24;;;;10653:110;10677:15;10694:68;10720:18;10740:11;10614:8;10694:25;:68::i;10653:110::-;10636:11;10648:1;10636:14;;;;;;;;;;;;;:127;;;;;10790:6;10777:7;10785:1;10777:10;;;;;;;;;;;;;;;;;:19;-1:-1:-1;10364:3:1;;10325:482;;;;10816:90;10840:10;10864:11;10889:7;10816:10;:90::i;:::-;10921:17;10917:724;;10958:32;10954:388;;11018:44;;;-1:-1:-1;;;11018:44:1;;11043:10;11018:44;;;;;;;;;;;;-1:-1:-1;;;;;11018:24:1;;;;;:44;;;;;;;;;;;;;;-1:-1:-1;11018:24:1;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;11018:44:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11018:44:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11018:44:1;11010:89;;;;;-1:-1:-1;;;11010:89:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10954:388;;;11138:189;11165:10;11197:60;11221:15;11238:18;11197:23;:60::i;:::-;11279:6;11138:189;;;;;;;;;;;;:5;:189::i;:::-;10917:724;;;11372:258;11395:10;11423:149;11447:15;11484:87;11510:18;11530:11;11558:12;11543;:27;11484:25;:87::i;11372:258::-;11720:11;11700:18;11671:10;-1:-1:-1;;;;;11656:95:1;;11683:15;11733:9;;11744:6;11656:95;;;;-1:-1:-1;;;;;11656:95:1;-1:-1:-1;;;;;11656:95:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;11656:95:1;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;11656:95:1;;;;-1:-1:-1;11656:95:1;;-1:-1:-1;;;;;;11656:95:1;9681:2077;;;;;;;;;;;:::o;2804:198:2:-;2902:10;2883:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;2883:40:2;;;;;;;;;;;;:51;;-1:-1:-1;;2883:51:2;;;;;;;;;;2949:46;;;;;;;2883:40;;2902:10;2949:46;;;;;;;;;;;2804:198;;:::o;4489:1121:1:-;4600:7;4651:1;4632:20;;4624:75;;;;-1:-1:-1;;;4624:75:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4802:19;4824:66;4849:10;4861;4873:16;4824:24;:66::i;:::-;4908:29;;;;:16;:29;;;;;:36;4802:88;;-1:-1:-1;4908:56:1;;4900:100;;;;;-1:-1:-1;;;4900:100:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;5018:30;;;;:17;:30;;;;;;:35;5010:78;;;;;-1:-1:-1;;;5010:78:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;5099:8;;5121:267;5142:16;5138:1;:20;5121:267;;;5179:8;5190:7;;5198:1;5190:10;;;;;;;;;;;;;5179:21;;5220:12;5228:3;5220;:7;;:12;;;;:::i;:::-;5255:29;;;;:16;:29;;;;;:32;;5214:18;;-1:-1:-1;5255:29:1;5285:1;;5255:32;;;;;;;;;;;;;;5291:1;5255:37;5247:78;;;;;-1:-1:-1;;;5247:78:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;5339:29;;;;:16;:29;;;;;:32;;5374:3;;5339:29;5369:1;;5339:32;;;;;;;;;;;;;;;:38;-1:-1:-1;5160:3:1;;5121:267;;;;5411:1;5405:3;:7;5397:40;;;;;-1:-1:-1;;;5397:40:1;;;;;;;;;;;;-1:-1:-1;;;5397:40:1;;;;;;;;;;;;;;;5447:30;;;;:17;:30;;;;;;;;:36;;;5573:16;:29;;;;;;5498:105;;;;;;;;;;;;;;;;;;;5543:10;;5531;;5465:11;;5498:105;;5555:16;;5573:29;;5498:105;;;;;5573:29;;5498:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4489:1121;;;;;;:::o;13849:139::-;13922:4;13945:29;;;:16;:29;;;;;:36;;13849:139::o;3263:681::-;3482:3;3462:16;:23;;3454:58;;;;;-1:-1:-1;;;3454:58:1;;;;;;;;;;;;-1:-1:-1;;;3454:58:1;;;;;;;;;;;;;;;3549:1;3530:16;:20;3522:75;;;;-1:-1:-1;;;3522:75:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3607:19;3629:62;3654:6;3662:10;3674:16;3629:24;:62::i;:::-;3709:29;;;;:16;:29;;;;;:36;3607:84;;-1:-1:-1;3709:41:1;3701:80;;;;;-1:-1:-1;;;3701:80:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;3834:16;3823:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;3823:28:1;-1:-1:-1;3791:29:1;;;;:16;:29;;;;;;;;:60;;;;:29;;:60;;;;;;:::i;:::-;;3908:10;3900:6;-1:-1:-1;;;;;3866:71:1;3887:11;3866:71;3920:16;3866:71;;;;;;;;;;;;;;;;;;3263:681;;;;:::o;2795:49::-;;;;;;;;;;;;;:::o;3279:147:2:-;-1:-1:-1;;;;;3384:25:2;;;3361:4;3384:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;3279:147::o;3980:696::-;-1:-1:-1;;;;;4165:16:2;;4157:69;;;;-1:-1:-1;;;4157:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4257:18:2;;4265:10;4257:18;;:66;;-1:-1:-1;;;;;;4279:24:2;;;;;;:18;:24;;;;;;;;4304:10;4279:36;;;;;;;;;;:44;;:36;:44;4257:66;4236:169;;;;-1:-1:-1;;;4236:169:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4438:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;4438:19:2;;;;;;;;;;:30;;4462:5;4438:30;:23;:30;:::i;:::-;4416:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;4416:19:2;;;;;;;;;;:52;;;;4508:17;;;;;;4498:28;;:5;;:9;:28::i;:::-;4478:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;4478:17:2;;;;;;;;;;;;;:48;;;;4542:47;;;;;;;;;;;;;;;;;4557:10;;4542:47;;;;;;;;;4600:69;4631:10;4643:4;4649:2;4653;4657:5;4664:4;;4600:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;4600:30:2;;-1:-1:-1;;;4600:69:2:i;:::-;3980:696;;;;;;:::o;16697:1221:0:-;16853:39;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;16853:39:0;;;;;;;16843:50;;;;;16809:7;;16921:3;16915:9;;;:14;;16809:7;;16973:173;-1:-1:-1;;;;;;;;;;;17006:1:0;17002:2;16995:16;16990:21;-1:-1:-1;;;;;;;;;;;;876:1:0;-1:-1:-1;;;;;;;;;;;775:77:0;17059:2;17055;17048:17;17044:2;17037:32;17030:46;17025:51;;17095:8;17100:2;17095:4;:8::i;:::-;17090:13;-1:-1:-1;17142:2:0;-1:-1:-1;;;;;;;;;;;17132:2:0;17128;17121:17;:23;;16973:173;;17158:3;:18;;;;-1:-1:-1;17170:1:0;17165:2;:6;:11;17158:18;:41;;;;17181:3;17180:4;:19;;;;-1:-1:-1;17193:1:0;17188:2;:6;17198:1;17188:11;17180:19;17155:69;;;17222:2;-1:-1:-1;;;;;;;;;;;17218:6:0;17213:11;;17155:69;17250:18;17282:7;;17279:551;;17317:3;17311:9;;;:14;;;-1:-1:-1;;;;;;17344:14:0;-1:-1:-1;;;;;;;;;;;876:1:0;-1:-1:-1;;;;;;;;;;;775:77:0;17406:2;17402;17395:17;17391:2;17384:32;17377:46;17372:51;;17437:7;17447:8;17452:2;17447:4;:8::i;:::-;17437:18;;17472:3;:18;;;;-1:-1:-1;17484:1:0;17479:2;:6;:11;17472:18;:41;;;;17495:3;17494:4;:19;;;;-1:-1:-1;17507:1:0;17502:2;:6;17512:1;17502:11;17494:19;17469:73;;;-1:-1:-1;;;;;;;;;;;17536:6:0;17469:73;17585:2;-1:-1:-1;;;;;;;;;;;17575:2:0;17571;17564:17;:23;17556:64;;;;;-1:-1:-1;;;17556:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17636:12;17650:16;17678:1;-1:-1:-1;;;;;17670:21:0;17703:2;17707;17711;17715;17692:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17692:26:0;;;17670:49;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;17670:49:0;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;17635:84:0;;;;17741:7;17733:32;;;;;-1:-1:-1;;;17733:32:0;;;;;;;;;;;;-1:-1:-1;;;17733:32:0;;;;;;;;;;;;;;;17801:3;17790:29;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17790:29:0;;;;;;;;;-1:-1:-1;17790:29:0;-1:-1:-1;;;;17279:551:0;17848:1;17843:2;:6;17853:1;17843:11;17840:42;;;-1:-1:-1;;;17868:14:0;;;;17840:42;-1:-1:-1;17908:2:0;;16697:1221;-1:-1:-1;;;;;;;16697:1221:0:o;18232:186::-;18362:47;;;;;;;;-1:-1:-1;;18362:47:0;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18362:47:0;;;;;;18352:58;;;;;;18232:186::o;834:176:7:-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:7;;;;;;;;;;;;;;;;;;;;;;;;;;;1693:458;1751:7;1991:6;1987:45;;-1:-1:-1;2020:1:7;2013:8;;1987:45;2054:5;;;2058:1;2054;:5;:1;2077:5;;;;;:10;2069:56;;;;-1:-1:-1;;;2069:56:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2606:326;2664:7;2761:1;2757;:5;2749:44;;;;;-1:-1:-1;;;2749:44:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;2803:9;2819:1;2815;:5;;;;;;;2606:326;-1:-1:-1;;;;2606:326:7:o;8152:208:2:-;8251:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;8251:20:2;;;;;;;;;;:31;;8276:5;8251:31;:24;:31;:::i;:::-;8228:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;8228:20:2;;;;;;;;;;;:54;;;;8297:56;;;;;;;;;;;;;8228:13;;:20;8312:10;;8297:56;;;;;;;;;8152:208;;;:::o;6582:374::-;-1:-1:-1;;;;;6682:16:2;;6674:62;;;;-1:-1:-1;;;6674:62:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6777:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;6777:17:2;;;;;;;;;;6767:28;;:5;;:28;:9;:28;:::i;:::-;6747:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;6747:17:2;;;;;;;;;;;:48;;;;6810:53;;;;;;;;;;;;;6825:10;;6810:53;;;;;;;;;6874:75;6905:10;6925:1;6929:2;6933;6937:5;6944:4;6874:30;:75::i;:::-;6582:374;;;;:::o;1274:179:7:-;1332:7;1364:1;1359;:6;;1351:49;;;;;-1:-1:-1;;;1351:49:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1422:5:7;;;1274:179::o;9573:548:2:-;9816:15;:2;-1:-1:-1;;;;;9816:13:2;;:15::i;:::-;9813:302;;;9872:83;;-1:-1:-1;;;9872:83:2;;;-1:-1:-1;;;;;9872:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9959:57;;:48;;;;;;9921:8;;9931:4;;9937:3;;9942:6;;9950:4;;9872:83;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9872:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9872:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9872:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9872:83:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9872:83:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9872:83:2;-1:-1:-1;;;;;;9872:144:2;;9847:257;;;;-1:-1:-1;;;9847:257:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7312:583;-1:-1:-1;;;;;7437:16:2;;7429:68;;;;-1:-1:-1;;;7429:68:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7529:6;:13;7515:3;:10;:27;7507:86;;;;-1:-1:-1;;;7507:86:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7608:6;7604:122;7624:3;:10;7620:1;:14;7604:122;;;7679:36;7693:9;:17;7703:3;7707:1;7703:6;;;;;;;;;;;;;;7693:17;;;;;;;;;;;:21;7711:2;-1:-1:-1;;;;;7693:21:2;-1:-1:-1;;;;;7693:21:2;;;;;;;;;;;;;7679:6;7686:1;7679:9;;;;;;;;;;;;;;:13;;:36;;;;:::i;:::-;7655:9;:17;7665:3;7669:1;7665:6;;;;;;;;;;;;;;;;;;;7655:17;;;;;;;;;;;;;-1:-1:-1;7655:17:2;;;-1:-1:-1;;;;;7655:21:2;;;;;;;;;:60;7636:3;;7604:122;;;;7779:2;-1:-1:-1;;;;;7741:54:2;7775:1;-1:-1:-1;;;;;7741:54:2;7755:10;-1:-1:-1;;;;;7741:54:2;;7783:3;7788:6;7741:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7741:54:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7741:54:2;;;;;;;;;;;;;;;;;;;7806:82;7842:10;7862:1;7866:2;7870:3;7875:6;7883:4;7806:35;:82::i;547:204:0:-;689:54;;;;;;;;-1:-1:-1;;689:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;689:54:0;;;;;;;679:65;;;;;;547:204::o;8630:405:2:-;8753:6;:13;8739:3;:10;:27;8731:86;;;;-1:-1:-1;;;8731:86:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8832:6;8828:128;8848:3;:10;8844:1;:14;8828:128;;;8906:39;8935:6;8942:1;8935:9;;;;;;;;;;;;;;8906;:17;8916:3;8920:1;8916:6;;;;;;;;;;;;;;8906:17;;;;;;;;;;;:24;8924:5;-1:-1:-1;;;;;8906:24:2;-1:-1:-1;;;;;8906:24:2;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;8879:9;:17;8889:3;8893:1;8889:6;;;;;;;;;;;;;;;;;;;8879:17;;;;;;;;;;;;;-1:-1:-1;8879:17:2;;;-1:-1:-1;;;;;8879:24:2;;;;;;;;;:66;8860:3;;8828:128;;;;9012:1;-1:-1:-1;;;;;8971:57:2;8997:5;-1:-1:-1;;;;;8971:57:2;8985:10;-1:-1:-1;;;;;8971:57:2;;9016:3;9021:6;8971:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8971:57:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8971:57:2;;;;;;;;;;;;;;;;;;;8630:405;;;:::o;9041:526::-;9259:15;:2;-1:-1:-1;;;;;9259:13:2;;:15::i;:::-;9256:305;;;9315:76;;-1:-1:-1;;;9315:76:2;;;-1:-1:-1;;;;;9315:76:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9415:52;;:43;;;;;;9359:8;;9369:4;;9375:2;;9379:5;;9386:4;;9315:76;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9315:76:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9315:76:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9315:76:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9315:76:2;-1:-1:-1;;;;;;9315:152:2;;9290:260;;;;-1:-1:-1;;;9290:260:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;884:15368:0;928:6;-1:-1:-1;;;;;;;;;;;775:77:0;3965:1;;3955:15;3950:20;;4023:1;4020;4017;4010:15;4060:1;4057;4054;4047:15;4042:20;;4097:1;4094;4091;4084:15;4079:20;;4134:1;4131;4128;4121:15;4116:20;;4171:1;4168;4165;4158:15;4153:20;;4208:1;4205;4202;4195:15;4190:20;;4271:1;4268;4265;4258:15;4312:1;4309;4306;4299:15;4294:20;;4353:1;4350;4347;4340:15;4335:20;;4394:1;4391;4388;4381:15;4376:20;;4435:1;4432;4429;4422:15;4417:20;;4476:1;4473;4470;4463:15;4458:20;;4517:1;4514;4511;4504:15;4499:20;;4558:1;4555;4552;4545:15;4540:20;;4599:1;4596;4593;4586:15;4581:20;;4640:1;4637;4634;4627:15;4622:20;;4681:1;4678;4675;4668:15;4663:20;;4722:1;4719;4716;4709:15;4704:20;;4763:1;4760;4757;4750:15;4745:20;;4804:1;4801;4798;4791:15;4786:20;;4845:1;4842;4839;4832:15;4827:20;;4886:1;4883;4880;4873:15;4868:20;;4927:1;4924;4921;4914:15;4909:20;;4968:1;4965;4962;4955:15;4950:20;;5009:1;5006;5003;4996:15;4991:20;;5050:1;5047;5044;5037:15;5032:20;;5091:1;5088;5085;5078:15;5073:20;;5132:1;5129;5126;5119:15;5114:20;;5173:1;5170;5167;5160:15;5155:20;;5214:1;5211;5208;5201:15;5196:20;;5255:1;5252;5249;5242:15;5237:20;;5296:1;5293;5290;5283:15;5278:20;;5337:1;5334;5331;5324:15;5319:20;;5378:1;5375;5372;5365:15;5360:20;;5419:1;5416;5413;5406:15;5401:20;;5460:1;5457;5454;5447:15;5442:20;;5501:1;5498;5495;5488:15;5483:20;;5542:1;5539;5536;5529:15;5524:20;;5583:1;5580;5577;5570:15;5565:20;;5624:1;5621;5618;5611:15;5606:20;;5665:1;5662;5659;5652:15;5647:20;;5706:1;5703;5700;5693:15;5688:20;;5747:1;5744;5741;5734:15;5729:20;;5788:1;5785;5782;5775:15;5770:20;;5829:1;5826;5823;5816:15;5811:20;;5870:1;5867;5864;5857:15;5852:20;;5911:1;5908;5905;5898:15;5893:20;;5952:1;5949;5946;5939:15;5934:20;;5993:1;5990;5987;5980:15;5975:20;;6034:1;6031;6028;6021:15;6016:20;;6075:1;6072;6069;6062:15;6057:20;;6116:1;6113;6110;6103:15;6098:20;;6157:1;6154;6151;6144:15;6139:20;;6198:1;6195;6192;6185:15;6180:20;;6239:1;6236;6233;6226:15;6221:20;;6280:1;6277;6274;6267:15;6262:20;;6321:1;6318;6315;6308:15;6303:20;;6362:1;6359;6356;6349:15;6344:20;;6403:1;6400;6397;6390:15;6385:20;;6444:1;6441;6438;6431:15;6426:20;;6485:1;6482;6479;6472:15;6467:20;;6526:1;6523;6520;6513:15;6508:20;;6567:1;6564;6561;6554:15;6549:20;;6608:1;6605;6602;6595:15;6590:20;;6649:1;6646;6643;6636:15;6631:20;;6690:1;6687;6684;6677:15;6672:20;;6761:1;6758;6755;6748:15;6806:1;6803;6800;6793:15;6788:20;;6851:1;6848;6845;6838:15;6833:20;;6896:1;6893;6890;6883:15;6878:20;;6941:1;6938;6935;6928:15;6923:20;;6986:1;6983;6980;6973:15;6968:20;;6713:297;7049:1;7046;7043;7036:15;7031:20;;7090:1;7087;7084;7077:15;7072:20;;7131:1;7128;7125;7118:15;7113:20;;7172:1;7169;7166;7159:15;7154:20;;7213:1;7210;7207;7200:15;7195:20;;7254:1;7251;7248;7241:15;7236:20;;7295:1;7292;7289;7282:15;7277:20;;7336:1;7333;7330;7323:15;7318:20;;7377:1;7374;7371;7364:15;7359:20;;7418:1;7415;7412;7405:15;7400:20;;7459:1;7456;7453;7446:15;7441:20;;7500:1;7497;7494;7487:15;7482:20;;7541:1;7538;7535;7528:15;7523:20;;7582:1;7579;7576;7569:15;7564:20;;7623:1;7620;7617;7610:15;7605:20;;7664:1;7661;7658;7651:15;7646:20;;7705:1;7702;7699;7692:15;7687:20;;7746:1;7743;7740;7733:15;7728:20;;7787:1;7784;7781;7774:15;7769:20;;7828:1;7825;7822;7815:15;7810:20;;7869:1;7866;7863;7856:15;7851:20;;7910:1;7907;7904;7897:15;7892:20;;7951:1;7948;7945;7938:15;7933:20;;7992:1;7989;7986;7979:15;7974:20;;8033:1;8030;8027;8020:15;8015:20;;8074:1;8071;8068;8061:15;8056:20;;8115:1;8112;8109;8102:15;8097:20;;8156:1;8153;8150;8143:15;8138:20;;8197:1;8194;8191;8184:15;8179:20;;8238:1;8235;8232;8225:15;8220:20;;8279:1;8276;8273;8266:15;8261:20;;8320:1;8317;8314;8307:15;8302:20;;8361:1;8358;8355;8348:15;8343:20;;8402:1;8399;8396;8389:15;8384:20;;8443:1;8440;8437;8430:15;8425:20;;8484:1;8481;8478;8471:15;8466:20;;8525:1;8522;8519;8512:15;8507:20;;8566:1;8563;8560;8553:15;8548:20;;8607:1;8604;8601;8594:15;8589:20;;8648:1;8645;8642;8635:15;8630:20;;8689:1;8686;8683;8676:15;8671:20;;8730:1;8727;8724;8717:15;8712:20;;8771:1;8768;8765;8758:15;8753:20;;8812:1;8809;8806;8799:15;8794:20;;8853:1;8850;8847;8840:15;8835:20;;8894:1;8891;8888;8881:15;8876:20;;8935:1;8932;8929;8922:15;8917:20;;8976:1;8973;8970;8963:15;8958:20;;9017:1;9014;9011;9004:15;8999:20;;9058:1;9055;9052;9045:15;9040:20;;9099:1;9096;9093;9086:15;9081:20;;9140:1;9137;9134;9127:15;9122:20;;9181:1;9178;9175;9168:15;9163:20;;9222:1;9219;9216;9209:15;9204:20;;9263:1;9260;9257;9250:15;9245:20;;9304:1;9301;9298;9291:15;9286:20;;9345:1;9342;9339;9332:15;9327:20;;9386:1;9383;9380;9373:15;9368:20;;9427:1;9424;9421;9414:15;9409:20;;9468:1;9465;9462;9455:15;9450:20;;9509:1;9506;9503;9496:15;9491:20;;9550:1;9547;9544;9537:15;9532:20;;9591:1;9588;9585;9578:15;9573:20;;9632:1;9629;9626;9619:15;9614:20;;9673:1;9670;9667;9660:15;9655:20;;9714:1;9711;9708;9701:15;9696:20;;9755:1;9752;9749;9742:15;9737:20;;9796:1;9793;9790;9783:15;9778:20;;9837:1;9834;9831;9824:15;9819:20;;9878:1;9875;9872;9865:15;9860:20;;9919:1;9916;9913;9906:15;9901:20;;9960:1;9957;9954;9947:15;9942:20;;10001:1;9998;9995;9988:15;9983:20;;10042:1;10039;10036;10029:15;10024:20;;10083:1;10080;10077;10070:15;10065:20;;10124:1;10121;10118;10111:15;10106:20;;10165:1;10162;10159;10152:15;10147:20;;10206:1;10203;10200;10193:15;10188:20;;10247:1;10244;10241;10234:15;10229:20;;10288:1;10285;10282;10275:15;10270:20;;10329:1;10326;10323;10316:15;10311:20;;10370:1;10367;10364;10357:15;10352:20;;10411:1;10408;10405;10398:15;10393:20;;10452:1;10449;10446;10439:15;10434:20;;10493:1;10490;10487;10480:15;10475:20;;10534:1;10531;10528;10521:15;10516:20;;10575:1;10572;10569;10562:15;10557:20;;10616:1;10613;10610;10603:15;10598:20;;10657:1;10654;10651;10644:15;10639:20;;10698:1;10695;10692;10685:15;10680:20;;10739:1;10736;10733;10726:15;10721:20;;10780:1;10777;10774;10767:15;10762:20;;10821:1;10818;10815;10808:15;10803:20;;10862:1;10859;10856;10849:15;10844:20;;10903:1;10900;10897;10890:15;10885:20;;10944:1;10941;10938;10931:15;10926:20;;10985:1;10982;10979;10972:15;10967:20;;11026:1;11023;11020;11013:15;11008:20;;11067:1;11064;11061;11054:15;11049:20;;11108:1;11105;11102;11095:15;11090:20;;11149:1;11146;11143;11136:15;11131:20;;11190:1;11187;11184;11177:15;11172:20;;11231:1;11228;11225;11218:15;11213:20;;11272:1;11269;11266;11259:15;11254:20;;11313:1;11310;11307;11300:15;11295:20;;11354:1;11351;11348;11341:15;11336:20;;11395:1;11392;11389;11382:15;11377:20;;11436:1;11433;11430;11423:15;11418:20;;11477:1;11474;11471;11464:15;11459:20;;11518:1;11515;11512;11505:15;11500:20;;11559:1;11556;11553;11546:15;11541:20;;11600:1;11597;11594;11587:15;11582:20;;11641:1;11638;11635;11628:15;11623:20;;11682:1;11679;11676;11669:15;11664:20;;4227:7475;11737:1;11734;11731;11724:15;11719:20;;11774:1;11771;11768;11761:15;11756:20;;11811:1;11808;11805;11798:15;11793:20;;11848:1;11845;11842;11835:15;11830:20;;11885:1;11882;11879;11872:15;11867:20;;11922:1;11919;11916;11909:15;11904:20;;11959:1;11956;11953;11946:15;11941:20;;11996:1;11993;11990;11983:15;11978:20;;3983:8029;12043:1;12040;12037;12030:15;12025:20;;12076:1;12073;12070;12063:15;12058:20;;12109:1;12106;12103;12096:15;12091:20;;12142:1;12139;12136;12129:15;12124:20;;12175:1;12172;12169;12162:15;12157:20;;12208:1;12205;12202;12195:15;12190:20;;12241:1;12238;12235;12228:15;12223:20;;12274:1;12271;12268;12261:15;12256:20;;12307:1;12304;12301;12294:15;12289:20;;12340:1;12337;12334;12327:15;12322:20;;12373:1;12370;12367;12360:15;12355:20;;12406:1;12403;12400;12393:15;12388:20;;12439:1;12436;12433;12426:15;12421:20;;12472:1;12469;12466;12459:15;12454:20;;12505:1;12502;12499;12492:15;12487:20;;12538:1;12535;12532;12525:15;12520:20;;12571:1;12568;12565;12558:15;12553:20;;12604:1;12601;12598;12591:15;12586:20;;12637:1;12634;12631;12624:15;12619:20;;12670:1;12667;12664;12657:15;12652:20;;12703:1;12700;12697;12690:15;12685:20;;12736:1;12733;12730;12723:15;12718:20;;12769:1;12766;12763;12756:15;12751:20;;12802:1;12799;12796;12789:15;12784:20;;12835:1;12832;12829;12822:15;12817:20;;12868:1;12865;12862;12855:15;12850:20;;12901:1;12898;12895;12888:15;12883:20;;12934:1;12931;12928;12921:15;12916:20;;12967:1;12964;12961;12954:15;12949:20;;13000:1;12997;12994;12987:15;12982:20;;13033:1;13030;13027;13020:15;13015:20;;13066:1;13063;13060;13053:15;13048:20;;13099:1;13096;13093;13086:15;13081:20;;13132:1;13129;13126;13119:15;13114:20;;13165:1;13162;13159;13152:15;13147:20;;13198:1;13195;13192;13185:15;13180:20;;13231:1;13228;13225;13218:15;13213:20;;13264:1;13261;13258;13251:15;13246:20;;13297:1;13294;13291;13284:15;13279:20;;13330:1;13327;13324;13317:15;13312:20;;13363:1;13360;13357;13350:15;13345:20;;13396:1;13393;13390;13383:15;13378:20;;13429:1;13426;13423;13416:15;13411:20;;13462:1;13459;13456;13449:15;13444:20;;13495:1;13492;13489;13482:15;13477:20;;13528:1;13525;13522;13515:15;13510:20;;13561:1;13558;13555;13548:15;13543:20;;13594:1;13591;13588;13581:15;13576:20;;13627:1;13624;13621;13614:15;13609:20;;13660:1;13657;13654;13647:15;13642:20;;13693:1;13690;13687;13680:15;13675:20;;13726:1;13723;13720;13713:15;13708:20;;13759:1;13756;13753;13746:15;13741:20;;13792:1;13789;13786;13779:15;13774:20;;13825:1;13822;13819;13812:15;13807:20;;13858:1;13855;13852;13845:15;13840:20;;13891:1;13888;13885;13878:15;13873:20;;13924:1;13921;13918;13911:15;13906:20;;13957:1;13954;13951;13944:15;13939:20;;13990:1;13987;13984;13977:15;13972:20;;14023:1;14020;14017;14010:15;14005:20;;14056:1;14053;14050;14043:15;14038:20;;14089:1;14086;14083;14076:15;14071:20;;14122:1;14119;14116;14109:15;14104:20;;14155:1;14152;14149;14142:15;14137:20;;14188:1;14185;14182;14175:15;14170:20;;14221:1;14218;14215;14208:15;14203:20;;14254:1;14251;14248;14241:15;14236:20;;14287:1;14284;14281;14274:15;14269:20;;14320:1;14317;14314;14307:15;14302:20;;14353:1;14350;14347;14340:15;14335:20;;14386:1;14383;14380;14373:15;14368:20;;14419:1;14416;14413;14406:15;14401:20;;14452:1;14449;14446;14439:15;14434:20;;14485:1;14482;14479;14472:15;14467:20;;14518:1;14515;14512;14505:15;14500:20;;14551:1;14548;14545;14538:15;14533:20;;14584:1;14581;14578;14571:15;14566:20;;14617:1;14614;14611;14604:15;14599:20;;14650:1;14647;14644;14637:15;14632:20;;14683:1;14680;14677;14670:15;14665:20;;14716:1;14713;14710;14703:15;14698:20;;14749:1;14746;14743;14736:15;14731:20;;14782:1;14779;14776;14769:15;14764:20;;14815:1;14812;14809;14802:15;14797:20;;14848:1;14845;14842;14835:15;14830:20;;14881:1;14878;14875;14868:15;14863:20;;14914:1;14911;14908;14901:15;14896:20;;14947:1;14944;14941;14934:15;14929:20;;14980:1;14977;14974;14967:15;14962:20;;15013:1;15010;15007;15000:15;14995:20;;15046:1;15043;15040;15033:15;15028:20;;15079:1;15076;15073;15066:15;15061:20;;15112:1;15109;15106;15099:15;15094:20;;15145:1;15142;15139;15132:15;15127:20;;15178:1;15175;15172;15165:15;15160:20;;15211:1;15208;15205;15198:15;15193:20;;15244:1;15241;15238;15231:15;15226:20;;15277:1;15274;15271;15264:15;15259:20;;15310:1;15307;15304;15297:15;15292:20;;15343:1;15340;15337;15330:15;15325:20;;15376:1;15373;15370;15363:15;15358:20;;15409:1;15406;15403;15396:15;15391:20;;15442:1;15439;15436;15429:15;15424:20;;15475:1;15472;15469;15462:15;15457:20;;15508:1;15505;15502;15495:15;15490:20;;15541:1;15538;15535;15528:15;15523:20;;15574:1;15571;15568;15561:15;15556:20;;15607:1;15604;15601;15594:15;15589:20;;15640:1;15637;15634;15627:15;15622:20;;15673:1;15670;15667;15660:15;15655:20;;15706:1;15703;15700;15693:15;15688:20;;15739:1;15736;15733;15726:15;15721:20;;15772:1;15769;15766;15759:15;15754:20;;15805:1;15802;15799;15792:15;15787:20;;15838:1;15835;15832;15825:15;15820:20;;15871:1;15868;15865;15858:15;15853:20;;15904:1;15901;15898;15891:15;15886:20;;15937:1;15934;15931;15924:15;15919:20;;15970:1;15967;15964;15957:15;15952:20;;16003:1;16000;15997;15990:15;15985:20;;16036:1;16033;16030;16023:15;16018:20;;16069:1;16066;16063;16056:15;16051:20;;16102:1;16099;16096;16089:15;16084:20;;16135:1;16132;16129;16122:15;16117:20;;16168:1;16165;16162;16155:15;16150:20;;16201:1;16198;16195;16188:15;16183:20;;16234:1;16231;16228;16221:15;16216:20;1039:15207;-1:-1:-1;;;1039:15207:0:o;542:413:9:-;902:20;940:8;;;542:413::o;200:15561:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;200:15561:1;;;-1:-1:-1;200:15561:1;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o\",\n        \"linkReferences\": {}\n    },\n    \"methodIdentifiers\": {\n        \"balanceOf(address,uint256)\": \"00fdd58e\",\n        \"balanceOfBatch(address[],uint256[])\": \"4e1273f4\",\n        \"getCollectionId(bytes32,bytes32,uint256)\": \"856296f7\",\n        \"getConditionId(address,bytes32,uint256)\": \"852c6ae2\",\n        \"getOutcomeSlotCount(bytes32)\": \"d42dc0c2\",\n        \"getPositionId(address,bytes32)\": \"39dd7530\",\n        \"isApprovedForAll(address,address)\": \"e985e9c5\",\n        \"mergePositions(address,bytes32,bytes32,uint256[],uint256)\": \"9e7212ad\",\n        \"payoutDenominator(bytes32)\": \"dd34de67\",\n        \"payoutNumerators(bytes32,uint256)\": \"0504c814\",\n        \"prepareCondition(address,bytes32,uint256)\": \"d96ee754\",\n        \"redeemPositions(address,bytes32,bytes32,uint256[])\": \"01b7037c\",\n        \"reportPayouts(bytes32,uint256[])\": \"c49298ac\",\n        \"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\": \"2eb2c2d6\",\n        \"safeTransferFrom(address,address,uint256,uint256,bytes)\": \"f242432a\",\n        \"setApprovalForAll(address,bool)\": \"a22cb465\",\n        \"splitPosition(address,bytes32,bytes32,uint256[],uint256)\": \"72ce4275\",\n        \"supportsInterface(bytes4)\": \"01ffc9a7\"\n    },\n    \"ast\": {\n        \"absolutePath\": \"lib/conditional-tokens-contracts/contracts/ConditionalTokens.sol\",\n        \"id\": 1267,\n        \"exportedSymbols\": {\n            \"ConditionalTokens\": [1266]\n        },\n        \"nodeType\": \"SourceUnit\",\n        \"src\": \"0:15762:1\",\n        \"nodes\": [\n            {\n                \"id\": 300,\n                \"nodeType\": \"PragmaDirective\",\n                \"src\": \"0:23:1\",\n                \"literals\": [\"solidity\", \"^\", \"0.5\", \".1\"]\n            },\n            {\n                \"id\": 302,\n                \"nodeType\": \"ImportDirective\",\n                \"src\": \"24:80:1\",\n                \"absolutePath\": \"lib/conditional-tokens-contracts/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\",\n                \"file\": \"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\",\n                \"scope\": 1267,\n                \"sourceUnit\": 2438,\n                \"symbolAliases\": [\n                    {\n                        \"foreign\": 301,\n                        \"local\": null\n                    }\n                ],\n                \"unitAlias\": \"\"\n            },\n            {\n                \"id\": 304,\n                \"nodeType\": \"ImportDirective\",\n                \"src\": \"105:48:1\",\n                \"absolutePath\": \"lib/conditional-tokens-contracts/contracts/ERC1155/ERC1155.sol\",\n                \"file\": \"./ERC1155/ERC1155.sol\",\n                \"scope\": 1267,\n                \"sourceUnit\": 2025,\n                \"symbolAliases\": [\n                    {\n                        \"foreign\": 303,\n                        \"local\": null\n                    }\n                ],\n                \"unitAlias\": \"\"\n            },\n            {\n                \"id\": 306,\n                \"nodeType\": \"ImportDirective\",\n                \"src\": \"154:44:1\",\n                \"absolutePath\": \"lib/conditional-tokens-contracts/contracts/CTHelpers.sol\",\n                \"file\": \"./CTHelpers.sol\",\n                \"scope\": 1267,\n                \"sourceUnit\": 299,\n                \"symbolAliases\": [\n                    {\n                        \"foreign\": 305,\n                        \"local\": null\n                    }\n                ],\n                \"unitAlias\": \"\"\n            },\n            {\n                \"id\": 1266,\n                \"nodeType\": \"ContractDefinition\",\n                \"src\": \"200:15561:1\",\n                \"nodes\": [\n                    {\n                        \"id\": 318,\n                        \"nodeType\": \"EventDefinition\",\n                        \"src\": \"792:169:1\",\n                        \"anonymous\": false,\n                        \"documentation\": \"@dev Emitted upon the successful preparation of a condition.\\n @param conditionId The condition's ID. This ID may be derived from the other three parameters via ``keccak256(abi.encodePacked(oracle, questionId, outcomeSlotCount))``.\\n @param oracle The account assigned to report the result for the prepared condition.\\n @param questionId An identifier for the question to be answered by the oracle.\\n @param outcomeSlotCount The number of outcome slots which should be used for this condition. Must not exceed 256.\",\n                        \"name\": \"ConditionPreparation\",\n                        \"parameters\": {\n                            \"id\": 317,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 310,\n                                    \"indexed\": true,\n                                    \"name\": \"conditionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 318,\n                                    \"src\": \"828:27:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 309,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"828:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 312,\n                                    \"indexed\": true,\n                                    \"name\": \"oracle\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 318,\n                                    \"src\": \"865:22:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_address\",\n                                        \"typeString\": \"address\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 311,\n                                        \"name\": \"address\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"865:7:1\",\n                                        \"stateMutability\": \"nonpayable\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_address\",\n                                            \"typeString\": \"address\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 314,\n                                    \"indexed\": true,\n                                    \"name\": \"questionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 318,\n                                    \"src\": \"897:26:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 313,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"897:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 316,\n                                    \"indexed\": false,\n                                    \"name\": \"outcomeSlotCount\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 318,\n                                    \"src\": \"933:21:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 315,\n                                        \"name\": \"uint\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"933:4:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"818:142:1\"\n                        }\n                    },\n                    {\n                        \"id\": 331,\n                        \"nodeType\": \"EventDefinition\",\n                        \"src\": \"967:201:1\",\n                        \"anonymous\": false,\n                        \"documentation\": null,\n                        \"name\": \"ConditionResolution\",\n                        \"parameters\": {\n                            \"id\": 330,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 320,\n                                    \"indexed\": true,\n                                    \"name\": \"conditionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 331,\n                                    \"src\": \"1002:27:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 319,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"1002:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 322,\n                                    \"indexed\": true,\n                                    \"name\": \"oracle\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 331,\n                                    \"src\": \"1039:22:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_address\",\n                                        \"typeString\": \"address\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 321,\n                                        \"name\": \"address\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"1039:7:1\",\n                                        \"stateMutability\": \"nonpayable\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_address\",\n                                            \"typeString\": \"address\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 324,\n                                    \"indexed\": true,\n                                    \"name\": \"questionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 331,\n                                    \"src\": \"1071:26:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 323,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"1071:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 326,\n                                    \"indexed\": false,\n                                    \"name\": \"outcomeSlotCount\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 331,\n                                    \"src\": \"1107:21:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 325,\n                                        \"name\": \"uint\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"1107:4:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 329,\n                                    \"indexed\": false,\n                                    \"name\": \"payoutNumerators\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 331,\n                                    \"src\": \"1138:23:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                        \"typeString\": \"uint256[]\"\n                                    },\n                                    \"typeName\": {\n                                        \"baseType\": {\n                                            \"id\": 327,\n                                            \"name\": \"uint\",\n                                            \"nodeType\": \"ElementaryTypeName\",\n                                            \"src\": \"1138:4:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"id\": 328,\n                                        \"length\": null,\n                                        \"nodeType\": \"ArrayTypeName\",\n                                        \"src\": \"1138:6:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                            \"typeString\": \"uint256[]\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"992:175:1\"\n                        }\n                    },\n                    {\n                        \"id\": 346,\n                        \"nodeType\": \"EventDefinition\",\n                        \"src\": \"1234:223:1\",\n                        \"anonymous\": false,\n                        \"documentation\": \"@dev Emitted when a position is successfully split.\",\n                        \"name\": \"PositionSplit\",\n                        \"parameters\": {\n                            \"id\": 345,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 333,\n                                    \"indexed\": true,\n                                    \"name\": \"stakeholder\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 346,\n                                    \"src\": \"1263:27:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_address\",\n                                        \"typeString\": \"address\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 332,\n                                        \"name\": \"address\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"1263:7:1\",\n                                        \"stateMutability\": \"nonpayable\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_address\",\n                                            \"typeString\": \"address\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 335,\n                                    \"indexed\": false,\n                                    \"name\": \"collateralToken\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 346,\n                                    \"src\": \"1300:22:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                        \"typeString\": \"contract IERC20\"\n                                    },\n                                    \"typeName\": {\n                                        \"contractScope\": null,\n                                        \"id\": 334,\n                                        \"name\": \"IERC20\",\n                                        \"nodeType\": \"UserDefinedTypeName\",\n                                        \"referencedDeclaration\": 2437,\n                                        \"src\": \"1300:6:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                            \"typeString\": \"contract IERC20\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 337,\n                                    \"indexed\": true,\n                                    \"name\": \"parentCollectionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 346,\n                                    \"src\": \"1332:34:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 336,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"1332:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 339,\n                                    \"indexed\": true,\n                                    \"name\": \"conditionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 346,\n                                    \"src\": \"1376:27:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 338,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"1376:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 342,\n                                    \"indexed\": false,\n                                    \"name\": \"partition\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 346,\n                                    \"src\": \"1413:16:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                        \"typeString\": \"uint256[]\"\n                                    },\n                                    \"typeName\": {\n                                        \"baseType\": {\n                                            \"id\": 340,\n                                            \"name\": \"uint\",\n                                            \"nodeType\": \"ElementaryTypeName\",\n                                            \"src\": \"1413:4:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"id\": 341,\n                                        \"length\": null,\n                                        \"nodeType\": \"ArrayTypeName\",\n                                        \"src\": \"1413:6:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                            \"typeString\": \"uint256[]\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 344,\n                                    \"indexed\": false,\n                                    \"name\": \"amount\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 346,\n                                    \"src\": \"1439:11:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 343,\n                                        \"name\": \"uint\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"1439:4:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"1253:203:1\"\n                        }\n                    },\n                    {\n                        \"id\": 361,\n                        \"nodeType\": \"EventDefinition\",\n                        \"src\": \"1523:224:1\",\n                        \"anonymous\": false,\n                        \"documentation\": \"@dev Emitted when positions are successfully merged.\",\n                        \"name\": \"PositionsMerge\",\n                        \"parameters\": {\n                            \"id\": 360,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 348,\n                                    \"indexed\": true,\n                                    \"name\": \"stakeholder\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 361,\n                                    \"src\": \"1553:27:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_address\",\n                                        \"typeString\": \"address\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 347,\n                                        \"name\": \"address\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"1553:7:1\",\n                                        \"stateMutability\": \"nonpayable\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_address\",\n                                            \"typeString\": \"address\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 350,\n                                    \"indexed\": false,\n                                    \"name\": \"collateralToken\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 361,\n                                    \"src\": \"1590:22:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                        \"typeString\": \"contract IERC20\"\n                                    },\n                                    \"typeName\": {\n                                        \"contractScope\": null,\n                                        \"id\": 349,\n                                        \"name\": \"IERC20\",\n                                        \"nodeType\": \"UserDefinedTypeName\",\n                                        \"referencedDeclaration\": 2437,\n                                        \"src\": \"1590:6:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                            \"typeString\": \"contract IERC20\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 352,\n                                    \"indexed\": true,\n                                    \"name\": \"parentCollectionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 361,\n                                    \"src\": \"1622:34:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 351,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"1622:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 354,\n                                    \"indexed\": true,\n                                    \"name\": \"conditionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 361,\n                                    \"src\": \"1666:27:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 353,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"1666:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 357,\n                                    \"indexed\": false,\n                                    \"name\": \"partition\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 361,\n                                    \"src\": \"1703:16:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                        \"typeString\": \"uint256[]\"\n                                    },\n                                    \"typeName\": {\n                                        \"baseType\": {\n                                            \"id\": 355,\n                                            \"name\": \"uint\",\n                                            \"nodeType\": \"ElementaryTypeName\",\n                                            \"src\": \"1703:4:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"id\": 356,\n                                        \"length\": null,\n                                        \"nodeType\": \"ArrayTypeName\",\n                                        \"src\": \"1703:6:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                            \"typeString\": \"uint256[]\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 359,\n                                    \"indexed\": false,\n                                    \"name\": \"amount\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 361,\n                                    \"src\": \"1729:11:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 358,\n                                        \"name\": \"uint\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"1729:4:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"1543:203:1\"\n                        }\n                    },\n                    {\n                        \"id\": 376,\n                        \"nodeType\": \"EventDefinition\",\n                        \"src\": \"1752:223:1\",\n                        \"anonymous\": false,\n                        \"documentation\": null,\n                        \"name\": \"PayoutRedemption\",\n                        \"parameters\": {\n                            \"id\": 375,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 363,\n                                    \"indexed\": true,\n                                    \"name\": \"redeemer\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 376,\n                                    \"src\": \"1784:24:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_address\",\n                                        \"typeString\": \"address\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 362,\n                                        \"name\": \"address\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"1784:7:1\",\n                                        \"stateMutability\": \"nonpayable\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_address\",\n                                            \"typeString\": \"address\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 365,\n                                    \"indexed\": true,\n                                    \"name\": \"collateralToken\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 376,\n                                    \"src\": \"1818:30:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                        \"typeString\": \"contract IERC20\"\n                                    },\n                                    \"typeName\": {\n                                        \"contractScope\": null,\n                                        \"id\": 364,\n                                        \"name\": \"IERC20\",\n                                        \"nodeType\": \"UserDefinedTypeName\",\n                                        \"referencedDeclaration\": 2437,\n                                        \"src\": \"1818:6:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                            \"typeString\": \"contract IERC20\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 367,\n                                    \"indexed\": true,\n                                    \"name\": \"parentCollectionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 376,\n                                    \"src\": \"1858:34:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 366,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"1858:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 369,\n                                    \"indexed\": false,\n                                    \"name\": \"conditionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 376,\n                                    \"src\": \"1902:19:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 368,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"1902:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 372,\n                                    \"indexed\": false,\n                                    \"name\": \"indexSets\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 376,\n                                    \"src\": \"1931:16:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                        \"typeString\": \"uint256[]\"\n                                    },\n                                    \"typeName\": {\n                                        \"baseType\": {\n                                            \"id\": 370,\n                                            \"name\": \"uint\",\n                                            \"nodeType\": \"ElementaryTypeName\",\n                                            \"src\": \"1931:4:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"id\": 371,\n                                        \"length\": null,\n                                        \"nodeType\": \"ArrayTypeName\",\n                                        \"src\": \"1931:6:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                            \"typeString\": \"uint256[]\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 374,\n                                    \"indexed\": false,\n                                    \"name\": \"payout\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 376,\n                                    \"src\": \"1957:11:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 373,\n                                        \"name\": \"uint\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"1957:4:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"1774:200:1\"\n                        }\n                    },\n                    {\n                        \"id\": 381,\n                        \"nodeType\": \"VariableDeclaration\",\n                        \"src\": \"2587:50:1\",\n                        \"constant\": false,\n                        \"name\": \"payoutNumerators\",\n                        \"scope\": 1266,\n                        \"stateVariable\": true,\n                        \"storageLocation\": \"default\",\n                        \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$\",\n                            \"typeString\": \"mapping(bytes32 => uint256[])\"\n                        },\n                        \"typeName\": {\n                            \"id\": 380,\n                            \"keyType\": {\n                                \"id\": 377,\n                                \"name\": \"bytes32\",\n                                \"nodeType\": \"ElementaryTypeName\",\n                                \"src\": \"2595:7:1\",\n                                \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_bytes32\",\n                                    \"typeString\": \"bytes32\"\n                                }\n                            },\n                            \"nodeType\": \"Mapping\",\n                            \"src\": \"2587:26:1\",\n                            \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$\",\n                                \"typeString\": \"mapping(bytes32 => uint256[])\"\n                            },\n                            \"valueType\": {\n                                \"baseType\": {\n                                    \"id\": 378,\n                                    \"name\": \"uint\",\n                                    \"nodeType\": \"ElementaryTypeName\",\n                                    \"src\": \"2606:4:1\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                    }\n                                },\n                                \"id\": 379,\n                                \"length\": null,\n                                \"nodeType\": \"ArrayTypeName\",\n                                \"src\": \"2606:6:1\",\n                                \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                    \"typeString\": \"uint256[]\"\n                                }\n                            }\n                        },\n                        \"value\": null,\n                        \"visibility\": \"public\"\n                    },\n                    {\n                        \"id\": 385,\n                        \"nodeType\": \"VariableDeclaration\",\n                        \"src\": \"2795:49:1\",\n                        \"constant\": false,\n                        \"name\": \"payoutDenominator\",\n                        \"scope\": 1266,\n                        \"stateVariable\": true,\n                        \"storageLocation\": \"default\",\n                        \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_uint256_$\",\n                            \"typeString\": \"mapping(bytes32 => uint256)\"\n                        },\n                        \"typeName\": {\n                            \"id\": 384,\n                            \"keyType\": {\n                                \"id\": 382,\n                                \"name\": \"bytes32\",\n                                \"nodeType\": \"ElementaryTypeName\",\n                                \"src\": \"2803:7:1\",\n                                \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_bytes32\",\n                                    \"typeString\": \"bytes32\"\n                                }\n                            },\n                            \"nodeType\": \"Mapping\",\n                            \"src\": \"2795:24:1\",\n                            \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_uint256_$\",\n                                \"typeString\": \"mapping(bytes32 => uint256)\"\n                            },\n                            \"valueType\": {\n                                \"id\": 383,\n                                \"name\": \"uint\",\n                                \"nodeType\": \"ElementaryTypeName\",\n                                \"src\": \"2814:4:1\",\n                                \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                }\n                            }\n                        },\n                        \"value\": null,\n                        \"visibility\": \"public\"\n                    },\n                    {\n                        \"id\": 445,\n                        \"nodeType\": \"FunctionDefinition\",\n                        \"src\": \"3263:681:1\",\n                        \"body\": {\n                            \"id\": 444,\n                            \"nodeType\": \"Block\",\n                            \"src\": \"3357:587:1\",\n                            \"statements\": [\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"commonType\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                \"id\": 397,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"leftExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 395,\n                                                    \"name\": \"outcomeSlotCount\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 391,\n                                                    \"src\": \"3462:16:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"BinaryOperation\",\n                                                \"operator\": \"<=\",\n                                                \"rightExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"hexValue\": \"323536\",\n                                                    \"id\": 396,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": true,\n                                                    \"kind\": \"number\",\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"Literal\",\n                                                    \"src\": \"3482:3:1\",\n                                                    \"subdenomination\": null,\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_rational_256_by_1\",\n                                                        \"typeString\": \"int_const 256\"\n                                                    },\n                                                    \"value\": \"256\"\n                                                },\n                                                \"src\": \"3462:23:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"hexValue\": \"746f6f206d616e79206f7574636f6d6520736c6f7473\",\n                                                \"id\": 398,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": true,\n                                                \"kind\": \"string\",\n                                                \"lValueRequested\": false,\n                                                \"nodeType\": \"Literal\",\n                                                \"src\": \"3487:24:1\",\n                                                \"subdenomination\": null,\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_stringliteral_5706584e314540f601d1501360936f8fc9e30a7d2e74e7748785732369bd0cdd\",\n                                                    \"typeString\": \"literal_string \\\"too many outcome slots\\\"\"\n                                                },\n                                                \"value\": \"too many outcome slots\"\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_stringliteral_5706584e314540f601d1501360936f8fc9e30a7d2e74e7748785732369bd0cdd\",\n                                                    \"typeString\": \"literal_string \\\"too many outcome slots\\\"\"\n                                                }\n                                            ],\n                                            \"id\": 394,\n                                            \"name\": \"require\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [2474, 2475],\n                                            \"referencedDeclaration\": 2475,\n                                            \"src\": \"3454:7:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                \"typeString\": \"function (bool,string memory) pure\"\n                                            }\n                                        },\n                                        \"id\": 399,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"3454:58:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 400,\n                                    \"nodeType\": \"ExpressionStatement\",\n                                    \"src\": \"3454:58:1\"\n                                },\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"commonType\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                \"id\": 404,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"leftExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 402,\n                                                    \"name\": \"outcomeSlotCount\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 391,\n                                                    \"src\": \"3530:16:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"BinaryOperation\",\n                                                \"operator\": \">\",\n                                                \"rightExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"hexValue\": \"31\",\n                                                    \"id\": 403,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": true,\n                                                    \"kind\": \"number\",\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"Literal\",\n                                                    \"src\": \"3549:1:1\",\n                                                    \"subdenomination\": null,\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_rational_1_by_1\",\n                                                        \"typeString\": \"int_const 1\"\n                                                    },\n                                                    \"value\": \"1\"\n                                                },\n                                                \"src\": \"3530:20:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"hexValue\": \"74686572652073686f756c64206265206d6f7265207468616e206f6e65206f7574636f6d6520736c6f74\",\n                                                \"id\": 405,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": true,\n                                                \"kind\": \"string\",\n                                                \"lValueRequested\": false,\n                                                \"nodeType\": \"Literal\",\n                                                \"src\": \"3552:44:1\",\n                                                \"subdenomination\": null,\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_stringliteral_dce89d4f172cf4dae11a3b6976848b58452c1ea09010dbef25b686837d9d158f\",\n                                                    \"typeString\": \"literal_string \\\"there should be more than one outcome slot\\\"\"\n                                                },\n                                                \"value\": \"there should be more than one outcome slot\"\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_stringliteral_dce89d4f172cf4dae11a3b6976848b58452c1ea09010dbef25b686837d9d158f\",\n                                                    \"typeString\": \"literal_string \\\"there should be more than one outcome slot\\\"\"\n                                                }\n                                            ],\n                                            \"id\": 401,\n                                            \"name\": \"require\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [2474, 2475],\n                                            \"referencedDeclaration\": 2475,\n                                            \"src\": \"3522:7:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                \"typeString\": \"function (bool,string memory) pure\"\n                                            }\n                                        },\n                                        \"id\": 406,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"3522:75:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 407,\n                                    \"nodeType\": \"ExpressionStatement\",\n                                    \"src\": \"3522:75:1\"\n                                },\n                                {\n                                    \"assignments\": [409],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 409,\n                                            \"name\": \"conditionId\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 444,\n                                            \"src\": \"3607:19:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"default\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_bytes32\",\n                                                \"typeString\": \"bytes32\"\n                                            },\n                                            \"typeName\": {\n                                                \"id\": 408,\n                                                \"name\": \"bytes32\",\n                                                \"nodeType\": \"ElementaryTypeName\",\n                                                \"src\": \"3607:7:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 416,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 412,\n                                                \"name\": \"oracle\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 387,\n                                                \"src\": \"3654:6:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_address\",\n                                                    \"typeString\": \"address\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 413,\n                                                \"name\": \"questionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 389,\n                                                \"src\": \"3662:10:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 414,\n                                                \"name\": \"outcomeSlotCount\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 391,\n                                                \"src\": \"3674:16:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_address\",\n                                                    \"typeString\": \"address\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            ],\n                                            \"expression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 410,\n                                                \"name\": \"CTHelpers\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 298,\n                                                \"src\": \"3629:9:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                    \"typeString\": \"type(library CTHelpers)\"\n                                                }\n                                            },\n                                            \"id\": 411,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"memberName\": \"getConditionId\",\n                                            \"nodeType\": \"MemberAccess\",\n                                            \"referencedDeclaration\": 24,\n                                            \"src\": \"3629:24:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_internal_pure$_t_address_$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$\",\n                                                \"typeString\": \"function (address,bytes32,uint256) pure returns (bytes32)\"\n                                            }\n                                        },\n                                        \"id\": 415,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"3629:62:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"3607:84:1\"\n                                },\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"commonType\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                \"id\": 423,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"leftExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"expression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"baseExpression\": {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 418,\n                                                            \"name\": \"payoutNumerators\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 381,\n                                                            \"src\": \"3709:16:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$\",\n                                                                \"typeString\": \"mapping(bytes32 => uint256[] storage ref)\"\n                                                            }\n                                                        },\n                                                        \"id\": 420,\n                                                        \"indexExpression\": {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 419,\n                                                            \"name\": \"conditionId\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 409,\n                                                            \"src\": \"3726:11:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_bytes32\",\n                                                                \"typeString\": \"bytes32\"\n                                                            }\n                                                        },\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": true,\n                                                        \"isPure\": false,\n                                                        \"lValueRequested\": false,\n                                                        \"nodeType\": \"IndexAccess\",\n                                                        \"src\": \"3709:29:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage\",\n                                                            \"typeString\": \"uint256[] storage ref\"\n                                                        }\n                                                    },\n                                                    \"id\": 421,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": true,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"memberName\": \"length\",\n                                                    \"nodeType\": \"MemberAccess\",\n                                                    \"referencedDeclaration\": null,\n                                                    \"src\": \"3709:36:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"BinaryOperation\",\n                                                \"operator\": \"==\",\n                                                \"rightExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"hexValue\": \"30\",\n                                                    \"id\": 422,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": true,\n                                                    \"kind\": \"number\",\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"Literal\",\n                                                    \"src\": \"3749:1:1\",\n                                                    \"subdenomination\": null,\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                        \"typeString\": \"int_const 0\"\n                                                    },\n                                                    \"value\": \"0\"\n                                                },\n                                                \"src\": \"3709:41:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"hexValue\": \"636f6e646974696f6e20616c7265616479207072657061726564\",\n                                                \"id\": 424,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": true,\n                                                \"kind\": \"string\",\n                                                \"lValueRequested\": false,\n                                                \"nodeType\": \"Literal\",\n                                                \"src\": \"3752:28:1\",\n                                                \"subdenomination\": null,\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_stringliteral_085f2ba305b65e1749ffb9aa5f5036488c96fa506e8794890472c8b77d753ee9\",\n                                                    \"typeString\": \"literal_string \\\"condition already prepared\\\"\"\n                                                },\n                                                \"value\": \"condition already prepared\"\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_stringliteral_085f2ba305b65e1749ffb9aa5f5036488c96fa506e8794890472c8b77d753ee9\",\n                                                    \"typeString\": \"literal_string \\\"condition already prepared\\\"\"\n                                                }\n                                            ],\n                                            \"id\": 417,\n                                            \"name\": \"require\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [2474, 2475],\n                                            \"referencedDeclaration\": 2475,\n                                            \"src\": \"3701:7:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                \"typeString\": \"function (bool,string memory) pure\"\n                                            }\n                                        },\n                                        \"id\": 425,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"3701:80:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 426,\n                                    \"nodeType\": \"ExpressionStatement\",\n                                    \"src\": \"3701:80:1\"\n                                },\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"id\": 435,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"leftHandSide\": {\n                                            \"argumentTypes\": null,\n                                            \"baseExpression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 427,\n                                                \"name\": \"payoutNumerators\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 381,\n                                                \"src\": \"3791:16:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$\",\n                                                    \"typeString\": \"mapping(bytes32 => uint256[] storage ref)\"\n                                                }\n                                            },\n                                            \"id\": 429,\n                                            \"indexExpression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 428,\n                                                \"name\": \"conditionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 409,\n                                                \"src\": \"3808:11:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            \"isConstant\": false,\n                                            \"isLValue\": true,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": true,\n                                            \"nodeType\": \"IndexAccess\",\n                                            \"src\": \"3791:29:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage\",\n                                                \"typeString\": \"uint256[] storage ref\"\n                                            }\n                                        },\n                                        \"nodeType\": \"Assignment\",\n                                        \"operator\": \"=\",\n                                        \"rightHandSide\": {\n                                            \"argumentTypes\": null,\n                                            \"arguments\": [\n                                                {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 433,\n                                                    \"name\": \"outcomeSlotCount\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 391,\n                                                    \"src\": \"3834:16:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                }\n                                            ],\n                                            \"expression\": {\n                                                \"argumentTypes\": [\n                                                    {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                ],\n                                                \"id\": 432,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": true,\n                                                \"lValueRequested\": false,\n                                                \"nodeType\": \"NewExpression\",\n                                                \"src\": \"3823:10:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$\",\n                                                    \"typeString\": \"function (uint256) pure returns (uint256[] memory)\"\n                                                },\n                                                \"typeName\": {\n                                                    \"baseType\": {\n                                                        \"id\": 430,\n                                                        \"name\": \"uint\",\n                                                        \"nodeType\": \"ElementaryTypeName\",\n                                                        \"src\": \"3827:4:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"id\": 431,\n                                                    \"length\": null,\n                                                    \"nodeType\": \"ArrayTypeName\",\n                                                    \"src\": \"3827:6:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                                        \"typeString\": \"uint256[]\"\n                                                    }\n                                                }\n                                            },\n                                            \"id\": 434,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": false,\n                                            \"kind\": \"functionCall\",\n                                            \"lValueRequested\": false,\n                                            \"names\": [],\n                                            \"nodeType\": \"FunctionCall\",\n                                            \"src\": \"3823:28:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory\",\n                                                \"typeString\": \"uint256[] memory\"\n                                            }\n                                        },\n                                        \"src\": \"3791:60:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage\",\n                                            \"typeString\": \"uint256[] storage ref\"\n                                        }\n                                    },\n                                    \"id\": 436,\n                                    \"nodeType\": \"ExpressionStatement\",\n                                    \"src\": \"3791:60:1\"\n                                },\n                                {\n                                    \"eventCall\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 438,\n                                                \"name\": \"conditionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 409,\n                                                \"src\": \"3887:11:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 439,\n                                                \"name\": \"oracle\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 387,\n                                                \"src\": \"3900:6:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_address\",\n                                                    \"typeString\": \"address\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 440,\n                                                \"name\": \"questionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 389,\n                                                \"src\": \"3908:10:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 441,\n                                                \"name\": \"outcomeSlotCount\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 391,\n                                                \"src\": \"3920:16:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_address\",\n                                                    \"typeString\": \"address\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            ],\n                                            \"id\": 437,\n                                            \"name\": \"ConditionPreparation\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 318,\n                                            \"src\": \"3866:20:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes32_$_t_uint256_$returns$__$\",\n                                                \"typeString\": \"function (bytes32,address,bytes32,uint256)\"\n                                            }\n                                        },\n                                        \"id\": 442,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"3866:71:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 443,\n                                    \"nodeType\": \"EmitStatement\",\n                                    \"src\": \"3861:76:1\"\n                                }\n                            ]\n                        },\n                        \"documentation\": \"@dev This function prepares a condition by initializing a payout vector associated with the condition.\\n @param oracle The account assigned to report the result for the prepared condition.\\n @param questionId An identifier for the question to be answered by the oracle.\\n @param outcomeSlotCount The number of outcome slots which should be used for this condition. Must not exceed 256.\",\n                        \"implemented\": true,\n                        \"kind\": \"function\",\n                        \"modifiers\": [],\n                        \"name\": \"prepareCondition\",\n                        \"parameters\": {\n                            \"id\": 392,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 387,\n                                    \"name\": \"oracle\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 445,\n                                    \"src\": \"3289:14:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_address\",\n                                        \"typeString\": \"address\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 386,\n                                        \"name\": \"address\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"3289:7:1\",\n                                        \"stateMutability\": \"nonpayable\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_address\",\n                                            \"typeString\": \"address\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 389,\n                                    \"name\": \"questionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 445,\n                                    \"src\": \"3305:18:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 388,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"3305:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 391,\n                                    \"name\": \"outcomeSlotCount\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 445,\n                                    \"src\": \"3325:21:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 390,\n                                        \"name\": \"uint\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"3325:4:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"3288:59:1\"\n                        },\n                        \"returnParameters\": {\n                            \"id\": 393,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [],\n                            \"src\": \"3357:0:1\"\n                        },\n                        \"scope\": 1266,\n                        \"stateMutability\": \"nonpayable\",\n                        \"superFunction\": null,\n                        \"visibility\": \"external\"\n                    },\n                    {\n                        \"id\": 567,\n                        \"nodeType\": \"FunctionDefinition\",\n                        \"src\": \"4489:1121:1\",\n                        \"body\": {\n                            \"id\": 566,\n                            \"nodeType\": \"Block\",\n                            \"src\": \"4566:1044:1\",\n                            \"statements\": [\n                                {\n                                    \"assignments\": [454],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 454,\n                                            \"name\": \"outcomeSlotCount\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 566,\n                                            \"src\": \"4576:21:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"default\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            },\n                                            \"typeName\": {\n                                                \"id\": 453,\n                                                \"name\": \"uint\",\n                                                \"nodeType\": \"ElementaryTypeName\",\n                                                \"src\": \"4576:4:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 457,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"expression\": {\n                                            \"argumentTypes\": null,\n                                            \"id\": 455,\n                                            \"name\": \"payouts\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 450,\n                                            \"src\": \"4600:7:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                \"typeString\": \"uint256[] calldata\"\n                                            }\n                                        },\n                                        \"id\": 456,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"memberName\": \"length\",\n                                        \"nodeType\": \"MemberAccess\",\n                                        \"referencedDeclaration\": null,\n                                        \"src\": \"4600:14:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"4576:38:1\"\n                                },\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"commonType\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                \"id\": 461,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"leftExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 459,\n                                                    \"name\": \"outcomeSlotCount\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 454,\n                                                    \"src\": \"4632:16:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"BinaryOperation\",\n                                                \"operator\": \">\",\n                                                \"rightExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"hexValue\": \"31\",\n                                                    \"id\": 460,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": true,\n                                                    \"kind\": \"number\",\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"Literal\",\n                                                    \"src\": \"4651:1:1\",\n                                                    \"subdenomination\": null,\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_rational_1_by_1\",\n                                                        \"typeString\": \"int_const 1\"\n                                                    },\n                                                    \"value\": \"1\"\n                                                },\n                                                \"src\": \"4632:20:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"hexValue\": \"74686572652073686f756c64206265206d6f7265207468616e206f6e65206f7574636f6d6520736c6f74\",\n                                                \"id\": 462,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": true,\n                                                \"kind\": \"string\",\n                                                \"lValueRequested\": false,\n                                                \"nodeType\": \"Literal\",\n                                                \"src\": \"4654:44:1\",\n                                                \"subdenomination\": null,\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_stringliteral_dce89d4f172cf4dae11a3b6976848b58452c1ea09010dbef25b686837d9d158f\",\n                                                    \"typeString\": \"literal_string \\\"there should be more than one outcome slot\\\"\"\n                                                },\n                                                \"value\": \"there should be more than one outcome slot\"\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_stringliteral_dce89d4f172cf4dae11a3b6976848b58452c1ea09010dbef25b686837d9d158f\",\n                                                    \"typeString\": \"literal_string \\\"there should be more than one outcome slot\\\"\"\n                                                }\n                                            ],\n                                            \"id\": 458,\n                                            \"name\": \"require\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [2474, 2475],\n                                            \"referencedDeclaration\": 2475,\n                                            \"src\": \"4624:7:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                \"typeString\": \"function (bool,string memory) pure\"\n                                            }\n                                        },\n                                        \"id\": 463,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"4624:75:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 464,\n                                    \"nodeType\": \"ExpressionStatement\",\n                                    \"src\": \"4624:75:1\"\n                                },\n                                {\n                                    \"assignments\": [466],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 466,\n                                            \"name\": \"conditionId\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 566,\n                                            \"src\": \"4802:19:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"default\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_bytes32\",\n                                                \"typeString\": \"bytes32\"\n                                            },\n                                            \"typeName\": {\n                                                \"id\": 465,\n                                                \"name\": \"bytes32\",\n                                                \"nodeType\": \"ElementaryTypeName\",\n                                                \"src\": \"4802:7:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 474,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 469,\n                                                    \"name\": \"msg\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 2471,\n                                                    \"src\": \"4849:3:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_magic_message\",\n                                                        \"typeString\": \"msg\"\n                                                    }\n                                                },\n                                                \"id\": 470,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"memberName\": \"sender\",\n                                                \"nodeType\": \"MemberAccess\",\n                                                \"referencedDeclaration\": null,\n                                                \"src\": \"4849:10:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                    \"typeString\": \"address payable\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 471,\n                                                \"name\": \"questionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 447,\n                                                \"src\": \"4861:10:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 472,\n                                                \"name\": \"outcomeSlotCount\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 454,\n                                                \"src\": \"4873:16:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                    \"typeString\": \"address payable\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            ],\n                                            \"expression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 467,\n                                                \"name\": \"CTHelpers\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 298,\n                                                \"src\": \"4824:9:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                    \"typeString\": \"type(library CTHelpers)\"\n                                                }\n                                            },\n                                            \"id\": 468,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"memberName\": \"getConditionId\",\n                                            \"nodeType\": \"MemberAccess\",\n                                            \"referencedDeclaration\": 24,\n                                            \"src\": \"4824:24:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_internal_pure$_t_address_$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$\",\n                                                \"typeString\": \"function (address,bytes32,uint256) pure returns (bytes32)\"\n                                            }\n                                        },\n                                        \"id\": 473,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"4824:66:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"4802:88:1\"\n                                },\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"commonType\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                \"id\": 481,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"leftExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"expression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"baseExpression\": {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 476,\n                                                            \"name\": \"payoutNumerators\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 381,\n                                                            \"src\": \"4908:16:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$\",\n                                                                \"typeString\": \"mapping(bytes32 => uint256[] storage ref)\"\n                                                            }\n                                                        },\n                                                        \"id\": 478,\n                                                        \"indexExpression\": {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 477,\n                                                            \"name\": \"conditionId\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 466,\n                                                            \"src\": \"4925:11:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_bytes32\",\n                                                                \"typeString\": \"bytes32\"\n                                                            }\n                                                        },\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": true,\n                                                        \"isPure\": false,\n                                                        \"lValueRequested\": false,\n                                                        \"nodeType\": \"IndexAccess\",\n                                                        \"src\": \"4908:29:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage\",\n                                                            \"typeString\": \"uint256[] storage ref\"\n                                                        }\n                                                    },\n                                                    \"id\": 479,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": true,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"memberName\": \"length\",\n                                                    \"nodeType\": \"MemberAccess\",\n                                                    \"referencedDeclaration\": null,\n                                                    \"src\": \"4908:36:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"BinaryOperation\",\n                                                \"operator\": \"==\",\n                                                \"rightExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 480,\n                                                    \"name\": \"outcomeSlotCount\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 454,\n                                                    \"src\": \"4948:16:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"src\": \"4908:56:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"hexValue\": \"636f6e646974696f6e206e6f74207072657061726564206f7220666f756e64\",\n                                                \"id\": 482,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": true,\n                                                \"kind\": \"string\",\n                                                \"lValueRequested\": false,\n                                                \"nodeType\": \"Literal\",\n                                                \"src\": \"4966:33:1\",\n                                                \"subdenomination\": null,\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_stringliteral_2a49cbe4db6e83a54b45612da58844b939b01a0a3fde01d08f446f7f023c332c\",\n                                                    \"typeString\": \"literal_string \\\"condition not prepared or found\\\"\"\n                                                },\n                                                \"value\": \"condition not prepared or found\"\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_stringliteral_2a49cbe4db6e83a54b45612da58844b939b01a0a3fde01d08f446f7f023c332c\",\n                                                    \"typeString\": \"literal_string \\\"condition not prepared or found\\\"\"\n                                                }\n                                            ],\n                                            \"id\": 475,\n                                            \"name\": \"require\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [2474, 2475],\n                                            \"referencedDeclaration\": 2475,\n                                            \"src\": \"4900:7:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                \"typeString\": \"function (bool,string memory) pure\"\n                                            }\n                                        },\n                                        \"id\": 483,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"4900:100:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 484,\n                                    \"nodeType\": \"ExpressionStatement\",\n                                    \"src\": \"4900:100:1\"\n                                },\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"commonType\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                \"id\": 490,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"leftExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"baseExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 486,\n                                                        \"name\": \"payoutDenominator\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 385,\n                                                        \"src\": \"5018:17:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_uint256_$\",\n                                                            \"typeString\": \"mapping(bytes32 => uint256)\"\n                                                        }\n                                                    },\n                                                    \"id\": 488,\n                                                    \"indexExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 487,\n                                                        \"name\": \"conditionId\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 466,\n                                                        \"src\": \"5036:11:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_bytes32\",\n                                                            \"typeString\": \"bytes32\"\n                                                        }\n                                                    },\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": true,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"IndexAccess\",\n                                                    \"src\": \"5018:30:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"BinaryOperation\",\n                                                \"operator\": \"==\",\n                                                \"rightExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"hexValue\": \"30\",\n                                                    \"id\": 489,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": true,\n                                                    \"kind\": \"number\",\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"Literal\",\n                                                    \"src\": \"5052:1:1\",\n                                                    \"subdenomination\": null,\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                        \"typeString\": \"int_const 0\"\n                                                    },\n                                                    \"value\": \"0\"\n                                                },\n                                                \"src\": \"5018:35:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"hexValue\": \"7061796f75742064656e6f6d696e61746f7220616c726561647920736574\",\n                                                \"id\": 491,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": true,\n                                                \"kind\": \"string\",\n                                                \"lValueRequested\": false,\n                                                \"nodeType\": \"Literal\",\n                                                \"src\": \"5055:32:1\",\n                                                \"subdenomination\": null,\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_stringliteral_6e02e620da3906989996cbf7fada43ca471ebaecde092b11e3ff24dcae3669cf\",\n                                                    \"typeString\": \"literal_string \\\"payout denominator already set\\\"\"\n                                                },\n                                                \"value\": \"payout denominator already set\"\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_stringliteral_6e02e620da3906989996cbf7fada43ca471ebaecde092b11e3ff24dcae3669cf\",\n                                                    \"typeString\": \"literal_string \\\"payout denominator already set\\\"\"\n                                                }\n                                            ],\n                                            \"id\": 485,\n                                            \"name\": \"require\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [2474, 2475],\n                                            \"referencedDeclaration\": 2475,\n                                            \"src\": \"5010:7:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                \"typeString\": \"function (bool,string memory) pure\"\n                                            }\n                                        },\n                                        \"id\": 492,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"5010:78:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 493,\n                                    \"nodeType\": \"ExpressionStatement\",\n                                    \"src\": \"5010:78:1\"\n                                },\n                                {\n                                    \"assignments\": [495],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 495,\n                                            \"name\": \"den\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 566,\n                                            \"src\": \"5099:8:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"default\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            },\n                                            \"typeName\": {\n                                                \"id\": 494,\n                                                \"name\": \"uint\",\n                                                \"nodeType\": \"ElementaryTypeName\",\n                                                \"src\": \"5099:4:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 497,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"hexValue\": \"30\",\n                                        \"id\": 496,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": true,\n                                        \"kind\": \"number\",\n                                        \"lValueRequested\": false,\n                                        \"nodeType\": \"Literal\",\n                                        \"src\": \"5110:1:1\",\n                                        \"subdenomination\": null,\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                                            \"typeString\": \"int_const 0\"\n                                        },\n                                        \"value\": \"0\"\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"5099:12:1\"\n                                },\n                                {\n                                    \"body\": {\n                                        \"id\": 540,\n                                        \"nodeType\": \"Block\",\n                                        \"src\": \"5165:223:1\",\n                                        \"statements\": [\n                                            {\n                                                \"assignments\": [509],\n                                                \"declarations\": [\n                                                    {\n                                                        \"constant\": false,\n                                                        \"id\": 509,\n                                                        \"name\": \"num\",\n                                                        \"nodeType\": \"VariableDeclaration\",\n                                                        \"scope\": 540,\n                                                        \"src\": \"5179:8:1\",\n                                                        \"stateVariable\": false,\n                                                        \"storageLocation\": \"default\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        },\n                                                        \"typeName\": {\n                                                            \"id\": 508,\n                                                            \"name\": \"uint\",\n                                                            \"nodeType\": \"ElementaryTypeName\",\n                                                            \"src\": \"5179:4:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        },\n                                                        \"value\": null,\n                                                        \"visibility\": \"internal\"\n                                                    }\n                                                ],\n                                                \"id\": 513,\n                                                \"initialValue\": {\n                                                    \"argumentTypes\": null,\n                                                    \"baseExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 510,\n                                                        \"name\": \"payouts\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 450,\n                                                        \"src\": \"5190:7:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                            \"typeString\": \"uint256[] calldata\"\n                                                        }\n                                                    },\n                                                    \"id\": 512,\n                                                    \"indexExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 511,\n                                                        \"name\": \"i\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 499,\n                                                        \"src\": \"5198:1:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"IndexAccess\",\n                                                    \"src\": \"5190:10:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"VariableDeclarationStatement\",\n                                                \"src\": \"5179:21:1\"\n                                            },\n                                            {\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 519,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"leftHandSide\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 514,\n                                                        \"name\": \"den\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 495,\n                                                        \"src\": \"5214:3:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"nodeType\": \"Assignment\",\n                                                    \"operator\": \"=\",\n                                                    \"rightHandSide\": {\n                                                        \"argumentTypes\": null,\n                                                        \"arguments\": [\n                                                            {\n                                                                \"argumentTypes\": null,\n                                                                \"id\": 517,\n                                                                \"name\": \"num\",\n                                                                \"nodeType\": \"Identifier\",\n                                                                \"overloadedDeclarations\": [],\n                                                                \"referencedDeclaration\": 509,\n                                                                \"src\": \"5228:3:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                    \"typeString\": \"uint256\"\n                                                                }\n                                                            }\n                                                        ],\n                                                        \"expression\": {\n                                                            \"argumentTypes\": [\n                                                                {\n                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                    \"typeString\": \"uint256\"\n                                                                }\n                                                            ],\n                                                            \"expression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"id\": 515,\n                                                                \"name\": \"den\",\n                                                                \"nodeType\": \"Identifier\",\n                                                                \"overloadedDeclarations\": [],\n                                                                \"referencedDeclaration\": 495,\n                                                                \"src\": \"5220:3:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                    \"typeString\": \"uint256\"\n                                                                }\n                                                            },\n                                                            \"id\": 516,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": false,\n                                                            \"lValueRequested\": false,\n                                                            \"memberName\": \"add\",\n                                                            \"nodeType\": \"MemberAccess\",\n                                                            \"referencedDeclaration\": 2262,\n                                                            \"src\": \"5220:7:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                                                \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                                            }\n                                                        },\n                                                        \"id\": 518,\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": false,\n                                                        \"isPure\": false,\n                                                        \"kind\": \"functionCall\",\n                                                        \"lValueRequested\": false,\n                                                        \"names\": [],\n                                                        \"nodeType\": \"FunctionCall\",\n                                                        \"src\": \"5220:12:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"src\": \"5214:18:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"id\": 520,\n                                                \"nodeType\": \"ExpressionStatement\",\n                                                \"src\": \"5214:18:1\"\n                                            },\n                                            {\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"arguments\": [\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"commonType\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            },\n                                                            \"id\": 528,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": false,\n                                                            \"lValueRequested\": false,\n                                                            \"leftExpression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"baseExpression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"baseExpression\": {\n                                                                        \"argumentTypes\": null,\n                                                                        \"id\": 522,\n                                                                        \"name\": \"payoutNumerators\",\n                                                                        \"nodeType\": \"Identifier\",\n                                                                        \"overloadedDeclarations\": [],\n                                                                        \"referencedDeclaration\": 381,\n                                                                        \"src\": \"5255:16:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$\",\n                                                                            \"typeString\": \"mapping(bytes32 => uint256[] storage ref)\"\n                                                                        }\n                                                                    },\n                                                                    \"id\": 524,\n                                                                    \"indexExpression\": {\n                                                                        \"argumentTypes\": null,\n                                                                        \"id\": 523,\n                                                                        \"name\": \"conditionId\",\n                                                                        \"nodeType\": \"Identifier\",\n                                                                        \"overloadedDeclarations\": [],\n                                                                        \"referencedDeclaration\": 466,\n                                                                        \"src\": \"5272:11:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_bytes32\",\n                                                                            \"typeString\": \"bytes32\"\n                                                                        }\n                                                                    },\n                                                                    \"isConstant\": false,\n                                                                    \"isLValue\": true,\n                                                                    \"isPure\": false,\n                                                                    \"lValueRequested\": false,\n                                                                    \"nodeType\": \"IndexAccess\",\n                                                                    \"src\": \"5255:29:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage\",\n                                                                        \"typeString\": \"uint256[] storage ref\"\n                                                                    }\n                                                                },\n                                                                \"id\": 526,\n                                                                \"indexExpression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 525,\n                                                                    \"name\": \"i\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 499,\n                                                                    \"src\": \"5285:1:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                        \"typeString\": \"uint256\"\n                                                                    }\n                                                                },\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": true,\n                                                                \"isPure\": false,\n                                                                \"lValueRequested\": false,\n                                                                \"nodeType\": \"IndexAccess\",\n                                                                \"src\": \"5255:32:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                    \"typeString\": \"uint256\"\n                                                                }\n                                                            },\n                                                            \"nodeType\": \"BinaryOperation\",\n                                                            \"operator\": \"==\",\n                                                            \"rightExpression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"hexValue\": \"30\",\n                                                                \"id\": 527,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": true,\n                                                                \"kind\": \"number\",\n                                                                \"lValueRequested\": false,\n                                                                \"nodeType\": \"Literal\",\n                                                                \"src\": \"5291:1:1\",\n                                                                \"subdenomination\": null,\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                                    \"typeString\": \"int_const 0\"\n                                                                },\n                                                                \"value\": \"0\"\n                                                            },\n                                                            \"src\": \"5255:37:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_bool\",\n                                                                \"typeString\": \"bool\"\n                                                            }\n                                                        },\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"hexValue\": \"7061796f7574206e756d657261746f7220616c726561647920736574\",\n                                                            \"id\": 529,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": true,\n                                                            \"kind\": \"string\",\n                                                            \"lValueRequested\": false,\n                                                            \"nodeType\": \"Literal\",\n                                                            \"src\": \"5294:30:1\",\n                                                            \"subdenomination\": null,\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_stringliteral_3a5485047320688d4127f54e4e0ca39f78a10abe715028e5b70b97dee5994e44\",\n                                                                \"typeString\": \"literal_string \\\"payout numerator already set\\\"\"\n                                                            },\n                                                            \"value\": \"payout numerator already set\"\n                                                        }\n                                                    ],\n                                                    \"expression\": {\n                                                        \"argumentTypes\": [\n                                                            {\n                                                                \"typeIdentifier\": \"t_bool\",\n                                                                \"typeString\": \"bool\"\n                                                            },\n                                                            {\n                                                                \"typeIdentifier\": \"t_stringliteral_3a5485047320688d4127f54e4e0ca39f78a10abe715028e5b70b97dee5994e44\",\n                                                                \"typeString\": \"literal_string \\\"payout numerator already set\\\"\"\n                                                            }\n                                                        ],\n                                                        \"id\": 521,\n                                                        \"name\": \"require\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [2474, 2475],\n                                                        \"referencedDeclaration\": 2475,\n                                                        \"src\": \"5247:7:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                            \"typeString\": \"function (bool,string memory) pure\"\n                                                        }\n                                                    },\n                                                    \"id\": 530,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"kind\": \"functionCall\",\n                                                    \"lValueRequested\": false,\n                                                    \"names\": [],\n                                                    \"nodeType\": \"FunctionCall\",\n                                                    \"src\": \"5247:78:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_tuple$__$\",\n                                                        \"typeString\": \"tuple()\"\n                                                    }\n                                                },\n                                                \"id\": 531,\n                                                \"nodeType\": \"ExpressionStatement\",\n                                                \"src\": \"5247:78:1\"\n                                            },\n                                            {\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 538,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"leftHandSide\": {\n                                                        \"argumentTypes\": null,\n                                                        \"baseExpression\": {\n                                                            \"argumentTypes\": null,\n                                                            \"baseExpression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"id\": 532,\n                                                                \"name\": \"payoutNumerators\",\n                                                                \"nodeType\": \"Identifier\",\n                                                                \"overloadedDeclarations\": [],\n                                                                \"referencedDeclaration\": 381,\n                                                                \"src\": \"5339:16:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$\",\n                                                                    \"typeString\": \"mapping(bytes32 => uint256[] storage ref)\"\n                                                                }\n                                                            },\n                                                            \"id\": 535,\n                                                            \"indexExpression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"id\": 533,\n                                                                \"name\": \"conditionId\",\n                                                                \"nodeType\": \"Identifier\",\n                                                                \"overloadedDeclarations\": [],\n                                                                \"referencedDeclaration\": 466,\n                                                                \"src\": \"5356:11:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                                    \"typeString\": \"bytes32\"\n                                                                }\n                                                            },\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": true,\n                                                            \"isPure\": false,\n                                                            \"lValueRequested\": false,\n                                                            \"nodeType\": \"IndexAccess\",\n                                                            \"src\": \"5339:29:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage\",\n                                                                \"typeString\": \"uint256[] storage ref\"\n                                                            }\n                                                        },\n                                                        \"id\": 536,\n                                                        \"indexExpression\": {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 534,\n                                                            \"name\": \"i\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 499,\n                                                            \"src\": \"5369:1:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        },\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": true,\n                                                        \"isPure\": false,\n                                                        \"lValueRequested\": true,\n                                                        \"nodeType\": \"IndexAccess\",\n                                                        \"src\": \"5339:32:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"nodeType\": \"Assignment\",\n                                                    \"operator\": \"=\",\n                                                    \"rightHandSide\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 537,\n                                                        \"name\": \"num\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 509,\n                                                        \"src\": \"5374:3:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"src\": \"5339:38:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"id\": 539,\n                                                \"nodeType\": \"ExpressionStatement\",\n                                                \"src\": \"5339:38:1\"\n                                            }\n                                        ]\n                                    },\n                                    \"condition\": {\n                                        \"argumentTypes\": null,\n                                        \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        },\n                                        \"id\": 504,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"leftExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"id\": 502,\n                                            \"name\": \"i\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 499,\n                                            \"src\": \"5138:1:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"nodeType\": \"BinaryOperation\",\n                                        \"operator\": \"<\",\n                                        \"rightExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"id\": 503,\n                                            \"name\": \"outcomeSlotCount\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 454,\n                                            \"src\": \"5142:16:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"src\": \"5138:20:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bool\",\n                                            \"typeString\": \"bool\"\n                                        }\n                                    },\n                                    \"id\": 541,\n                                    \"initializationExpression\": {\n                                        \"assignments\": [499],\n                                        \"declarations\": [\n                                            {\n                                                \"constant\": false,\n                                                \"id\": 499,\n                                                \"name\": \"i\",\n                                                \"nodeType\": \"VariableDeclaration\",\n                                                \"scope\": 541,\n                                                \"src\": \"5126:6:1\",\n                                                \"stateVariable\": false,\n                                                \"storageLocation\": \"default\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                \"typeName\": {\n                                                    \"id\": 498,\n                                                    \"name\": \"uint\",\n                                                    \"nodeType\": \"ElementaryTypeName\",\n                                                    \"src\": \"5126:4:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"value\": null,\n                                                \"visibility\": \"internal\"\n                                            }\n                                        ],\n                                        \"id\": 501,\n                                        \"initialValue\": {\n                                            \"argumentTypes\": null,\n                                            \"hexValue\": \"30\",\n                                            \"id\": 500,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": true,\n                                            \"kind\": \"number\",\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"Literal\",\n                                            \"src\": \"5135:1:1\",\n                                            \"subdenomination\": null,\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                \"typeString\": \"int_const 0\"\n                                            },\n                                            \"value\": \"0\"\n                                        },\n                                        \"nodeType\": \"VariableDeclarationStatement\",\n                                        \"src\": \"5126:10:1\"\n                                    },\n                                    \"loopExpression\": {\n                                        \"expression\": {\n                                            \"argumentTypes\": null,\n                                            \"id\": 506,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"UnaryOperation\",\n                                            \"operator\": \"++\",\n                                            \"prefix\": false,\n                                            \"src\": \"5160:3:1\",\n                                            \"subExpression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 505,\n                                                \"name\": \"i\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 499,\n                                                \"src\": \"5160:1:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            },\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"id\": 507,\n                                        \"nodeType\": \"ExpressionStatement\",\n                                        \"src\": \"5160:3:1\"\n                                    },\n                                    \"nodeType\": \"ForStatement\",\n                                    \"src\": \"5121:267:1\"\n                                },\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"commonType\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                \"id\": 545,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"leftExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 543,\n                                                    \"name\": \"den\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 495,\n                                                    \"src\": \"5405:3:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"BinaryOperation\",\n                                                \"operator\": \">\",\n                                                \"rightExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"hexValue\": \"30\",\n                                                    \"id\": 544,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": true,\n                                                    \"kind\": \"number\",\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"Literal\",\n                                                    \"src\": \"5411:1:1\",\n                                                    \"subdenomination\": null,\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                        \"typeString\": \"int_const 0\"\n                                                    },\n                                                    \"value\": \"0\"\n                                                },\n                                                \"src\": \"5405:7:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"hexValue\": \"7061796f757420697320616c6c207a65726f6573\",\n                                                \"id\": 546,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": true,\n                                                \"kind\": \"string\",\n                                                \"lValueRequested\": false,\n                                                \"nodeType\": \"Literal\",\n                                                \"src\": \"5414:22:1\",\n                                                \"subdenomination\": null,\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_stringliteral_ecb4c17013e582c5700501761dd8163e4cceba6f6ed55e500cd2a5e2233938ef\",\n                                                    \"typeString\": \"literal_string \\\"payout is all zeroes\\\"\"\n                                                },\n                                                \"value\": \"payout is all zeroes\"\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_stringliteral_ecb4c17013e582c5700501761dd8163e4cceba6f6ed55e500cd2a5e2233938ef\",\n                                                    \"typeString\": \"literal_string \\\"payout is all zeroes\\\"\"\n                                                }\n                                            ],\n                                            \"id\": 542,\n                                            \"name\": \"require\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [2474, 2475],\n                                            \"referencedDeclaration\": 2475,\n                                            \"src\": \"5397:7:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                \"typeString\": \"function (bool,string memory) pure\"\n                                            }\n                                        },\n                                        \"id\": 547,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"5397:40:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 548,\n                                    \"nodeType\": \"ExpressionStatement\",\n                                    \"src\": \"5397:40:1\"\n                                },\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"id\": 553,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"leftHandSide\": {\n                                            \"argumentTypes\": null,\n                                            \"baseExpression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 549,\n                                                \"name\": \"payoutDenominator\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 385,\n                                                \"src\": \"5447:17:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_uint256_$\",\n                                                    \"typeString\": \"mapping(bytes32 => uint256)\"\n                                                }\n                                            },\n                                            \"id\": 551,\n                                            \"indexExpression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 550,\n                                                \"name\": \"conditionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 466,\n                                                \"src\": \"5465:11:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            \"isConstant\": false,\n                                            \"isLValue\": true,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": true,\n                                            \"nodeType\": \"IndexAccess\",\n                                            \"src\": \"5447:30:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"nodeType\": \"Assignment\",\n                                        \"operator\": \"=\",\n                                        \"rightHandSide\": {\n                                            \"argumentTypes\": null,\n                                            \"id\": 552,\n                                            \"name\": \"den\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 495,\n                                            \"src\": \"5480:3:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"src\": \"5447:36:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"id\": 554,\n                                    \"nodeType\": \"ExpressionStatement\",\n                                    \"src\": \"5447:36:1\"\n                                },\n                                {\n                                    \"eventCall\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 556,\n                                                \"name\": \"conditionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 466,\n                                                \"src\": \"5518:11:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 557,\n                                                    \"name\": \"msg\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 2471,\n                                                    \"src\": \"5531:3:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_magic_message\",\n                                                        \"typeString\": \"msg\"\n                                                    }\n                                                },\n                                                \"id\": 558,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"memberName\": \"sender\",\n                                                \"nodeType\": \"MemberAccess\",\n                                                \"referencedDeclaration\": null,\n                                                \"src\": \"5531:10:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                    \"typeString\": \"address payable\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 559,\n                                                \"name\": \"questionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 447,\n                                                \"src\": \"5543:10:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 560,\n                                                \"name\": \"outcomeSlotCount\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 454,\n                                                \"src\": \"5555:16:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"baseExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 561,\n                                                    \"name\": \"payoutNumerators\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 381,\n                                                    \"src\": \"5573:16:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$\",\n                                                        \"typeString\": \"mapping(bytes32 => uint256[] storage ref)\"\n                                                    }\n                                                },\n                                                \"id\": 563,\n                                                \"indexExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 562,\n                                                    \"name\": \"conditionId\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 466,\n                                                    \"src\": \"5590:11:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_bytes32\",\n                                                        \"typeString\": \"bytes32\"\n                                                    }\n                                                },\n                                                \"isConstant\": false,\n                                                \"isLValue\": true,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"nodeType\": \"IndexAccess\",\n                                                \"src\": \"5573:29:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage\",\n                                                    \"typeString\": \"uint256[] storage ref\"\n                                                }\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                    \"typeString\": \"address payable\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage\",\n                                                    \"typeString\": \"uint256[] storage ref\"\n                                                }\n                                            ],\n                                            \"id\": 555,\n                                            \"name\": \"ConditionResolution\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 331,\n                                            \"src\": \"5498:19:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes32_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$\",\n                                                \"typeString\": \"function (bytes32,address,bytes32,uint256,uint256[] memory)\"\n                                            }\n                                        },\n                                        \"id\": 564,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"5498:105:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 565,\n                                    \"nodeType\": \"EmitStatement\",\n                                    \"src\": \"5493:110:1\"\n                                }\n                            ]\n                        },\n                        \"documentation\": \"@dev Called by the oracle for reporting results of conditions. Will set the payout vector for the condition with the ID ``keccak256(abi.encodePacked(oracle, questionId, outcomeSlotCount))``, where oracle is the message sender, questionId is one of the parameters of this function, and outcomeSlotCount is the length of the payouts parameter, which contains the payoutNumerators for each outcome slot of the condition.\\n @param questionId The question ID the oracle is answering for\\n @param payouts The oracle's answer\",\n                        \"implemented\": true,\n                        \"kind\": \"function\",\n                        \"modifiers\": [],\n                        \"name\": \"reportPayouts\",\n                        \"parameters\": {\n                            \"id\": 451,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 447,\n                                    \"name\": \"questionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 567,\n                                    \"src\": \"4512:18:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 446,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"4512:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 450,\n                                    \"name\": \"payouts\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 567,\n                                    \"src\": \"4532:23:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"calldata\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                        \"typeString\": \"uint256[]\"\n                                    },\n                                    \"typeName\": {\n                                        \"baseType\": {\n                                            \"id\": 448,\n                                            \"name\": \"uint\",\n                                            \"nodeType\": \"ElementaryTypeName\",\n                                            \"src\": \"4532:4:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"id\": 449,\n                                        \"length\": null,\n                                        \"nodeType\": \"ArrayTypeName\",\n                                        \"src\": \"4532:6:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                            \"typeString\": \"uint256[]\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"4511:45:1\"\n                        },\n                        \"returnParameters\": {\n                            \"id\": 452,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [],\n                            \"src\": \"4566:0:1\"\n                        },\n                        \"scope\": 1266,\n                        \"stateMutability\": \"nonpayable\",\n                        \"superFunction\": null,\n                        \"visibility\": \"external\"\n                    },\n                    {\n                        \"id\": 778,\n                        \"nodeType\": \"FunctionDefinition\",\n                        \"src\": \"6951:2724:1\",\n                        \"body\": {\n                            \"id\": 777,\n                            \"nodeType\": \"Block\",\n                            \"src\": \"7142:2533:1\",\n                            \"statements\": [\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"commonType\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                \"id\": 585,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"leftExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"expression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 582,\n                                                        \"name\": \"partition\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 576,\n                                                        \"src\": \"7160:9:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                            \"typeString\": \"uint256[] calldata\"\n                                                        }\n                                                    },\n                                                    \"id\": 583,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"memberName\": \"length\",\n                                                    \"nodeType\": \"MemberAccess\",\n                                                    \"referencedDeclaration\": null,\n                                                    \"src\": \"7160:16:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"BinaryOperation\",\n                                                \"operator\": \">\",\n                                                \"rightExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"hexValue\": \"31\",\n                                                    \"id\": 584,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": true,\n                                                    \"kind\": \"number\",\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"Literal\",\n                                                    \"src\": \"7179:1:1\",\n                                                    \"subdenomination\": null,\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_rational_1_by_1\",\n                                                        \"typeString\": \"int_const 1\"\n                                                    },\n                                                    \"value\": \"1\"\n                                                },\n                                                \"src\": \"7160:20:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"hexValue\": \"676f7420656d707479206f722073696e676c65746f6e20706172746974696f6e\",\n                                                \"id\": 586,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": true,\n                                                \"kind\": \"string\",\n                                                \"lValueRequested\": false,\n                                                \"nodeType\": \"Literal\",\n                                                \"src\": \"7182:34:1\",\n                                                \"subdenomination\": null,\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_stringliteral_8ee17141ea2791412c04ba41356365d6f264a90f211baef05b35a8c13c0585ff\",\n                                                    \"typeString\": \"literal_string \\\"got empty or singleton partition\\\"\"\n                                                },\n                                                \"value\": \"got empty or singleton partition\"\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_stringliteral_8ee17141ea2791412c04ba41356365d6f264a90f211baef05b35a8c13c0585ff\",\n                                                    \"typeString\": \"literal_string \\\"got empty or singleton partition\\\"\"\n                                                }\n                                            ],\n                                            \"id\": 581,\n                                            \"name\": \"require\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [2474, 2475],\n                                            \"referencedDeclaration\": 2475,\n                                            \"src\": \"7152:7:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                \"typeString\": \"function (bool,string memory) pure\"\n                                            }\n                                        },\n                                        \"id\": 587,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"7152:65:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 588,\n                                    \"nodeType\": \"ExpressionStatement\",\n                                    \"src\": \"7152:65:1\"\n                                },\n                                {\n                                    \"assignments\": [590],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 590,\n                                            \"name\": \"outcomeSlotCount\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 777,\n                                            \"src\": \"7227:21:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"default\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            },\n                                            \"typeName\": {\n                                                \"id\": 589,\n                                                \"name\": \"uint\",\n                                                \"nodeType\": \"ElementaryTypeName\",\n                                                \"src\": \"7227:4:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 595,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"expression\": {\n                                            \"argumentTypes\": null,\n                                            \"baseExpression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 591,\n                                                \"name\": \"payoutNumerators\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 381,\n                                                \"src\": \"7251:16:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$\",\n                                                    \"typeString\": \"mapping(bytes32 => uint256[] storage ref)\"\n                                                }\n                                            },\n                                            \"id\": 593,\n                                            \"indexExpression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 592,\n                                                \"name\": \"conditionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 573,\n                                                \"src\": \"7268:11:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            \"isConstant\": false,\n                                            \"isLValue\": true,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"IndexAccess\",\n                                            \"src\": \"7251:29:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage\",\n                                                \"typeString\": \"uint256[] storage ref\"\n                                            }\n                                        },\n                                        \"id\": 594,\n                                        \"isConstant\": false,\n                                        \"isLValue\": true,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"memberName\": \"length\",\n                                        \"nodeType\": \"MemberAccess\",\n                                        \"referencedDeclaration\": null,\n                                        \"src\": \"7251:36:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"7227:60:1\"\n                                },\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"commonType\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                \"id\": 599,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"leftExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 597,\n                                                    \"name\": \"outcomeSlotCount\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 590,\n                                                    \"src\": \"7305:16:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"BinaryOperation\",\n                                                \"operator\": \">\",\n                                                \"rightExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"hexValue\": \"30\",\n                                                    \"id\": 598,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": true,\n                                                    \"kind\": \"number\",\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"Literal\",\n                                                    \"src\": \"7324:1:1\",\n                                                    \"subdenomination\": null,\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                        \"typeString\": \"int_const 0\"\n                                                    },\n                                                    \"value\": \"0\"\n                                                },\n                                                \"src\": \"7305:20:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"hexValue\": \"636f6e646974696f6e206e6f7420707265706172656420796574\",\n                                                \"id\": 600,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": true,\n                                                \"kind\": \"string\",\n                                                \"lValueRequested\": false,\n                                                \"nodeType\": \"Literal\",\n                                                \"src\": \"7327:28:1\",\n                                                \"subdenomination\": null,\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_stringliteral_e04bbd75ab4a1437326ef11a696b620d013bedb4db855d7241cc1435c81cd55a\",\n                                                    \"typeString\": \"literal_string \\\"condition not prepared yet\\\"\"\n                                                },\n                                                \"value\": \"condition not prepared yet\"\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_stringliteral_e04bbd75ab4a1437326ef11a696b620d013bedb4db855d7241cc1435c81cd55a\",\n                                                    \"typeString\": \"literal_string \\\"condition not prepared yet\\\"\"\n                                                }\n                                            ],\n                                            \"id\": 596,\n                                            \"name\": \"require\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [2474, 2475],\n                                            \"referencedDeclaration\": 2475,\n                                            \"src\": \"7297:7:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                \"typeString\": \"function (bool,string memory) pure\"\n                                            }\n                                        },\n                                        \"id\": 601,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"7297:59:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 602,\n                                    \"nodeType\": \"ExpressionStatement\",\n                                    \"src\": \"7297:59:1\"\n                                },\n                                {\n                                    \"assignments\": [604],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 604,\n                                            \"name\": \"fullIndexSet\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 777,\n                                            \"src\": \"7455:17:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"default\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            },\n                                            \"typeName\": {\n                                                \"id\": 603,\n                                                \"name\": \"uint\",\n                                                \"nodeType\": \"ElementaryTypeName\",\n                                                \"src\": \"7455:4:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 611,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        },\n                                        \"id\": 610,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"leftExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"components\": [\n                                                {\n                                                    \"argumentTypes\": null,\n                                                    \"commonType\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    },\n                                                    \"id\": 607,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"leftExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"hexValue\": \"31\",\n                                                        \"id\": 605,\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": false,\n                                                        \"isPure\": true,\n                                                        \"kind\": \"number\",\n                                                        \"lValueRequested\": false,\n                                                        \"nodeType\": \"Literal\",\n                                                        \"src\": \"7476:1:1\",\n                                                        \"subdenomination\": null,\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_rational_1_by_1\",\n                                                            \"typeString\": \"int_const 1\"\n                                                        },\n                                                        \"value\": \"1\"\n                                                    },\n                                                    \"nodeType\": \"BinaryOperation\",\n                                                    \"operator\": \"<<\",\n                                                    \"rightExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 606,\n                                                        \"name\": \"outcomeSlotCount\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 590,\n                                                        \"src\": \"7481:16:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"src\": \"7476:21:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                }\n                                            ],\n                                            \"id\": 608,\n                                            \"isConstant\": false,\n                                            \"isInlineArray\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"TupleExpression\",\n                                            \"src\": \"7475:23:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"nodeType\": \"BinaryOperation\",\n                                        \"operator\": \"-\",\n                                        \"rightExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"hexValue\": \"31\",\n                                            \"id\": 609,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": true,\n                                            \"kind\": \"number\",\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"Literal\",\n                                            \"src\": \"7501:1:1\",\n                                            \"subdenomination\": null,\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_rational_1_by_1\",\n                                                \"typeString\": \"int_const 1\"\n                                            },\n                                            \"value\": \"1\"\n                                        },\n                                        \"src\": \"7475:27:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"7455:47:1\"\n                                },\n                                {\n                                    \"assignments\": [613],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 613,\n                                            \"name\": \"freeIndexSet\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 777,\n                                            \"src\": \"7566:17:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"default\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            },\n                                            \"typeName\": {\n                                                \"id\": 612,\n                                                \"name\": \"uint\",\n                                                \"nodeType\": \"ElementaryTypeName\",\n                                                \"src\": \"7566:4:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 615,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"id\": 614,\n                                        \"name\": \"fullIndexSet\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 604,\n                                        \"src\": \"7586:12:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"7566:32:1\"\n                                },\n                                {\n                                    \"assignments\": [619],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 619,\n                                            \"name\": \"positionIds\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 777,\n                                            \"src\": \"7723:25:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"memory\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                                \"typeString\": \"uint256[]\"\n                                            },\n                                            \"typeName\": {\n                                                \"baseType\": {\n                                                    \"id\": 617,\n                                                    \"name\": \"uint\",\n                                                    \"nodeType\": \"ElementaryTypeName\",\n                                                    \"src\": \"7723:4:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"id\": 618,\n                                                \"length\": null,\n                                                \"nodeType\": \"ArrayTypeName\",\n                                                \"src\": \"7723:6:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                                    \"typeString\": \"uint256[]\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 626,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 623,\n                                                    \"name\": \"partition\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 576,\n                                                    \"src\": \"7762:9:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                        \"typeString\": \"uint256[] calldata\"\n                                                    }\n                                                },\n                                                \"id\": 624,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"memberName\": \"length\",\n                                                \"nodeType\": \"MemberAccess\",\n                                                \"referencedDeclaration\": null,\n                                                \"src\": \"7762:16:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            ],\n                                            \"id\": 622,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": true,\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"NewExpression\",\n                                            \"src\": \"7751:10:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$\",\n                                                \"typeString\": \"function (uint256) pure returns (uint256[] memory)\"\n                                            },\n                                            \"typeName\": {\n                                                \"baseType\": {\n                                                    \"id\": 620,\n                                                    \"name\": \"uint\",\n                                                    \"nodeType\": \"ElementaryTypeName\",\n                                                    \"src\": \"7755:4:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"id\": 621,\n                                                \"length\": null,\n                                                \"nodeType\": \"ArrayTypeName\",\n                                                \"src\": \"7755:6:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                                    \"typeString\": \"uint256[]\"\n                                                }\n                                            }\n                                        },\n                                        \"id\": 625,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"7751:28:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory\",\n                                            \"typeString\": \"uint256[] memory\"\n                                        }\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"7723:56:1\"\n                                },\n                                {\n                                    \"assignments\": [630],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 630,\n                                            \"name\": \"amounts\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 777,\n                                            \"src\": \"7789:21:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"memory\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                                \"typeString\": \"uint256[]\"\n                                            },\n                                            \"typeName\": {\n                                                \"baseType\": {\n                                                    \"id\": 628,\n                                                    \"name\": \"uint\",\n                                                    \"nodeType\": \"ElementaryTypeName\",\n                                                    \"src\": \"7789:4:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"id\": 629,\n                                                \"length\": null,\n                                                \"nodeType\": \"ArrayTypeName\",\n                                                \"src\": \"7789:6:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                                    \"typeString\": \"uint256[]\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 637,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 634,\n                                                    \"name\": \"partition\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 576,\n                                                    \"src\": \"7824:9:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                        \"typeString\": \"uint256[] calldata\"\n                                                    }\n                                                },\n                                                \"id\": 635,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"memberName\": \"length\",\n                                                \"nodeType\": \"MemberAccess\",\n                                                \"referencedDeclaration\": null,\n                                                \"src\": \"7824:16:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            ],\n                                            \"id\": 633,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": true,\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"NewExpression\",\n                                            \"src\": \"7813:10:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$\",\n                                                \"typeString\": \"function (uint256) pure returns (uint256[] memory)\"\n                                            },\n                                            \"typeName\": {\n                                                \"baseType\": {\n                                                    \"id\": 631,\n                                                    \"name\": \"uint\",\n                                                    \"nodeType\": \"ElementaryTypeName\",\n                                                    \"src\": \"7817:4:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"id\": 632,\n                                                \"length\": null,\n                                                \"nodeType\": \"ArrayTypeName\",\n                                                \"src\": \"7817:6:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                                    \"typeString\": \"uint256[]\"\n                                                }\n                                            }\n                                        },\n                                        \"id\": 636,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"7813:28:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory\",\n                                            \"typeString\": \"uint256[] memory\"\n                                        }\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"7789:52:1\"\n                                },\n                                {\n                                    \"body\": {\n                                        \"id\": 701,\n                                        \"nodeType\": \"Block\",\n                                        \"src\": \"7895:438:1\",\n                                        \"statements\": [\n                                            {\n                                                \"assignments\": [650],\n                                                \"declarations\": [\n                                                    {\n                                                        \"constant\": false,\n                                                        \"id\": 650,\n                                                        \"name\": \"indexSet\",\n                                                        \"nodeType\": \"VariableDeclaration\",\n                                                        \"scope\": 701,\n                                                        \"src\": \"7909:13:1\",\n                                                        \"stateVariable\": false,\n                                                        \"storageLocation\": \"default\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        },\n                                                        \"typeName\": {\n                                                            \"id\": 649,\n                                                            \"name\": \"uint\",\n                                                            \"nodeType\": \"ElementaryTypeName\",\n                                                            \"src\": \"7909:4:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        },\n                                                        \"value\": null,\n                                                        \"visibility\": \"internal\"\n                                                    }\n                                                ],\n                                                \"id\": 654,\n                                                \"initialValue\": {\n                                                    \"argumentTypes\": null,\n                                                    \"baseExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 651,\n                                                        \"name\": \"partition\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 576,\n                                                        \"src\": \"7925:9:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                            \"typeString\": \"uint256[] calldata\"\n                                                        }\n                                                    },\n                                                    \"id\": 653,\n                                                    \"indexExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 652,\n                                                        \"name\": \"i\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 639,\n                                                        \"src\": \"7935:1:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"IndexAccess\",\n                                                    \"src\": \"7925:12:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"VariableDeclarationStatement\",\n                                                \"src\": \"7909:28:1\"\n                                            },\n                                            {\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"arguments\": [\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"commonType\": {\n                                                                \"typeIdentifier\": \"t_bool\",\n                                                                \"typeString\": \"bool\"\n                                                            },\n                                                            \"id\": 662,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": false,\n                                                            \"lValueRequested\": false,\n                                                            \"leftExpression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"commonType\": {\n                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                    \"typeString\": \"uint256\"\n                                                                },\n                                                                \"id\": 658,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"lValueRequested\": false,\n                                                                \"leftExpression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 656,\n                                                                    \"name\": \"indexSet\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 650,\n                                                                    \"src\": \"7959:8:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                        \"typeString\": \"uint256\"\n                                                                    }\n                                                                },\n                                                                \"nodeType\": \"BinaryOperation\",\n                                                                \"operator\": \">\",\n                                                                \"rightExpression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"hexValue\": \"30\",\n                                                                    \"id\": 657,\n                                                                    \"isConstant\": false,\n                                                                    \"isLValue\": false,\n                                                                    \"isPure\": true,\n                                                                    \"kind\": \"number\",\n                                                                    \"lValueRequested\": false,\n                                                                    \"nodeType\": \"Literal\",\n                                                                    \"src\": \"7970:1:1\",\n                                                                    \"subdenomination\": null,\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                                        \"typeString\": \"int_const 0\"\n                                                                    },\n                                                                    \"value\": \"0\"\n                                                                },\n                                                                \"src\": \"7959:12:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_bool\",\n                                                                    \"typeString\": \"bool\"\n                                                                }\n                                                            },\n                                                            \"nodeType\": \"BinaryOperation\",\n                                                            \"operator\": \"&&\",\n                                                            \"rightExpression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"commonType\": {\n                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                    \"typeString\": \"uint256\"\n                                                                },\n                                                                \"id\": 661,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"lValueRequested\": false,\n                                                                \"leftExpression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 659,\n                                                                    \"name\": \"indexSet\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 650,\n                                                                    \"src\": \"7975:8:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                        \"typeString\": \"uint256\"\n                                                                    }\n                                                                },\n                                                                \"nodeType\": \"BinaryOperation\",\n                                                                \"operator\": \"<\",\n                                                                \"rightExpression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 660,\n                                                                    \"name\": \"fullIndexSet\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 604,\n                                                                    \"src\": \"7986:12:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                        \"typeString\": \"uint256\"\n                                                                    }\n                                                                },\n                                                                \"src\": \"7975:23:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_bool\",\n                                                                    \"typeString\": \"bool\"\n                                                                }\n                                                            },\n                                                            \"src\": \"7959:39:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_bool\",\n                                                                \"typeString\": \"bool\"\n                                                            }\n                                                        },\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"hexValue\": \"676f7420696e76616c696420696e64657820736574\",\n                                                            \"id\": 663,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": true,\n                                                            \"kind\": \"string\",\n                                                            \"lValueRequested\": false,\n                                                            \"nodeType\": \"Literal\",\n                                                            \"src\": \"8000:23:1\",\n                                                            \"subdenomination\": null,\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_stringliteral_6a6949259bc762cfed0fdf355e0e833a39c80f6df01cfb722c2d69f034e6a9c2\",\n                                                                \"typeString\": \"literal_string \\\"got invalid index set\\\"\"\n                                                            },\n                                                            \"value\": \"got invalid index set\"\n                                                        }\n                                                    ],\n                                                    \"expression\": {\n                                                        \"argumentTypes\": [\n                                                            {\n                                                                \"typeIdentifier\": \"t_bool\",\n                                                                \"typeString\": \"bool\"\n                                                            },\n                                                            {\n                                                                \"typeIdentifier\": \"t_stringliteral_6a6949259bc762cfed0fdf355e0e833a39c80f6df01cfb722c2d69f034e6a9c2\",\n                                                                \"typeString\": \"literal_string \\\"got invalid index set\\\"\"\n                                                            }\n                                                        ],\n                                                        \"id\": 655,\n                                                        \"name\": \"require\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [2474, 2475],\n                                                        \"referencedDeclaration\": 2475,\n                                                        \"src\": \"7951:7:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                            \"typeString\": \"function (bool,string memory) pure\"\n                                                        }\n                                                    },\n                                                    \"id\": 664,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"kind\": \"functionCall\",\n                                                    \"lValueRequested\": false,\n                                                    \"names\": [],\n                                                    \"nodeType\": \"FunctionCall\",\n                                                    \"src\": \"7951:73:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_tuple$__$\",\n                                                        \"typeString\": \"tuple()\"\n                                                    }\n                                                },\n                                                \"id\": 665,\n                                                \"nodeType\": \"ExpressionStatement\",\n                                                \"src\": \"7951:73:1\"\n                                            },\n                                            {\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"arguments\": [\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"commonType\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            },\n                                                            \"id\": 672,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": false,\n                                                            \"lValueRequested\": false,\n                                                            \"leftExpression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"components\": [\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"commonType\": {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        },\n                                                                        \"id\": 669,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": false,\n                                                                        \"lValueRequested\": false,\n                                                                        \"leftExpression\": {\n                                                                            \"argumentTypes\": null,\n                                                                            \"id\": 667,\n                                                                            \"name\": \"indexSet\",\n                                                                            \"nodeType\": \"Identifier\",\n                                                                            \"overloadedDeclarations\": [],\n                                                                            \"referencedDeclaration\": 650,\n                                                                            \"src\": \"8047:8:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                \"typeString\": \"uint256\"\n                                                                            }\n                                                                        },\n                                                                        \"nodeType\": \"BinaryOperation\",\n                                                                        \"operator\": \"&\",\n                                                                        \"rightExpression\": {\n                                                                            \"argumentTypes\": null,\n                                                                            \"id\": 668,\n                                                                            \"name\": \"freeIndexSet\",\n                                                                            \"nodeType\": \"Identifier\",\n                                                                            \"overloadedDeclarations\": [],\n                                                                            \"referencedDeclaration\": 613,\n                                                                            \"src\": \"8058:12:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                \"typeString\": \"uint256\"\n                                                                            }\n                                                                        },\n                                                                        \"src\": \"8047:23:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    }\n                                                                ],\n                                                                \"id\": 670,\n                                                                \"isConstant\": false,\n                                                                \"isInlineArray\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"lValueRequested\": false,\n                                                                \"nodeType\": \"TupleExpression\",\n                                                                \"src\": \"8046:25:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                    \"typeString\": \"uint256\"\n                                                                }\n                                                            },\n                                                            \"nodeType\": \"BinaryOperation\",\n                                                            \"operator\": \"==\",\n                                                            \"rightExpression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"id\": 671,\n                                                                \"name\": \"indexSet\",\n                                                                \"nodeType\": \"Identifier\",\n                                                                \"overloadedDeclarations\": [],\n                                                                \"referencedDeclaration\": 650,\n                                                                \"src\": \"8075:8:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                    \"typeString\": \"uint256\"\n                                                                }\n                                                            },\n                                                            \"src\": \"8046:37:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_bool\",\n                                                                \"typeString\": \"bool\"\n                                                            }\n                                                        },\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"hexValue\": \"706172746974696f6e206e6f74206469736a6f696e74\",\n                                                            \"id\": 673,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": true,\n                                                            \"kind\": \"string\",\n                                                            \"lValueRequested\": false,\n                                                            \"nodeType\": \"Literal\",\n                                                            \"src\": \"8085:24:1\",\n                                                            \"subdenomination\": null,\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_stringliteral_a336fd2d125b487729e17b65dd490bafa0eb0de3aa7aaeba65732e819267b75b\",\n                                                                \"typeString\": \"literal_string \\\"partition not disjoint\\\"\"\n                                                            },\n                                                            \"value\": \"partition not disjoint\"\n                                                        }\n                                                    ],\n                                                    \"expression\": {\n                                                        \"argumentTypes\": [\n                                                            {\n                                                                \"typeIdentifier\": \"t_bool\",\n                                                                \"typeString\": \"bool\"\n                                                            },\n                                                            {\n                                                                \"typeIdentifier\": \"t_stringliteral_a336fd2d125b487729e17b65dd490bafa0eb0de3aa7aaeba65732e819267b75b\",\n                                                                \"typeString\": \"literal_string \\\"partition not disjoint\\\"\"\n                                                            }\n                                                        ],\n                                                        \"id\": 666,\n                                                        \"name\": \"require\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [2474, 2475],\n                                                        \"referencedDeclaration\": 2475,\n                                                        \"src\": \"8038:7:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                            \"typeString\": \"function (bool,string memory) pure\"\n                                                        }\n                                                    },\n                                                    \"id\": 674,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"kind\": \"functionCall\",\n                                                    \"lValueRequested\": false,\n                                                    \"names\": [],\n                                                    \"nodeType\": \"FunctionCall\",\n                                                    \"src\": \"8038:72:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_tuple$__$\",\n                                                        \"typeString\": \"tuple()\"\n                                                    }\n                                                },\n                                                \"id\": 675,\n                                                \"nodeType\": \"ExpressionStatement\",\n                                                \"src\": \"8038:72:1\"\n                                            },\n                                            {\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 678,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"leftHandSide\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 676,\n                                                        \"name\": \"freeIndexSet\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 613,\n                                                        \"src\": \"8124:12:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"nodeType\": \"Assignment\",\n                                                    \"operator\": \"^=\",\n                                                    \"rightHandSide\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 677,\n                                                        \"name\": \"indexSet\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 650,\n                                                        \"src\": \"8140:8:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"src\": \"8124:24:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"id\": 679,\n                                                \"nodeType\": \"ExpressionStatement\",\n                                                \"src\": \"8124:24:1\"\n                                            },\n                                            {\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 693,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"leftHandSide\": {\n                                                        \"argumentTypes\": null,\n                                                        \"baseExpression\": {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 680,\n                                                            \"name\": \"positionIds\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 619,\n                                                            \"src\": \"8162:11:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                                                \"typeString\": \"uint256[] memory\"\n                                                            }\n                                                        },\n                                                        \"id\": 682,\n                                                        \"indexExpression\": {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 681,\n                                                            \"name\": \"i\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 639,\n                                                            \"src\": \"8174:1:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        },\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": true,\n                                                        \"isPure\": false,\n                                                        \"lValueRequested\": true,\n                                                        \"nodeType\": \"IndexAccess\",\n                                                        \"src\": \"8162:14:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"nodeType\": \"Assignment\",\n                                                    \"operator\": \"=\",\n                                                    \"rightHandSide\": {\n                                                        \"argumentTypes\": null,\n                                                        \"arguments\": [\n                                                            {\n                                                                \"argumentTypes\": null,\n                                                                \"id\": 685,\n                                                                \"name\": \"collateralToken\",\n                                                                \"nodeType\": \"Identifier\",\n                                                                \"overloadedDeclarations\": [],\n                                                                \"referencedDeclaration\": 569,\n                                                                \"src\": \"8203:15:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                    \"typeString\": \"contract IERC20\"\n                                                                }\n                                                            },\n                                                            {\n                                                                \"argumentTypes\": null,\n                                                                \"arguments\": [\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"id\": 688,\n                                                                        \"name\": \"parentCollectionId\",\n                                                                        \"nodeType\": \"Identifier\",\n                                                                        \"overloadedDeclarations\": [],\n                                                                        \"referencedDeclaration\": 571,\n                                                                        \"src\": \"8246:18:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_bytes32\",\n                                                                            \"typeString\": \"bytes32\"\n                                                                        }\n                                                                    },\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"id\": 689,\n                                                                        \"name\": \"conditionId\",\n                                                                        \"nodeType\": \"Identifier\",\n                                                                        \"overloadedDeclarations\": [],\n                                                                        \"referencedDeclaration\": 573,\n                                                                        \"src\": \"8266:11:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_bytes32\",\n                                                                            \"typeString\": \"bytes32\"\n                                                                        }\n                                                                    },\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"id\": 690,\n                                                                        \"name\": \"indexSet\",\n                                                                        \"nodeType\": \"Identifier\",\n                                                                        \"overloadedDeclarations\": [],\n                                                                        \"referencedDeclaration\": 650,\n                                                                        \"src\": \"8279:8:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    }\n                                                                ],\n                                                                \"expression\": {\n                                                                    \"argumentTypes\": [\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_bytes32\",\n                                                                            \"typeString\": \"bytes32\"\n                                                                        },\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_bytes32\",\n                                                                            \"typeString\": \"bytes32\"\n                                                                        },\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    ],\n                                                                    \"expression\": {\n                                                                        \"argumentTypes\": null,\n                                                                        \"id\": 686,\n                                                                        \"name\": \"CTHelpers\",\n                                                                        \"nodeType\": \"Identifier\",\n                                                                        \"overloadedDeclarations\": [],\n                                                                        \"referencedDeclaration\": 298,\n                                                                        \"src\": \"8220:9:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                                            \"typeString\": \"type(library CTHelpers)\"\n                                                                        }\n                                                                    },\n                                                                    \"id\": 687,\n                                                                    \"isConstant\": false,\n                                                                    \"isLValue\": false,\n                                                                    \"isPure\": false,\n                                                                    \"lValueRequested\": false,\n                                                                    \"memberName\": \"getCollectionId\",\n                                                                    \"nodeType\": \"MemberAccess\",\n                                                                    \"referencedDeclaration\": 277,\n                                                                    \"src\": \"8220:25:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$\",\n                                                                        \"typeString\": \"function (bytes32,bytes32,uint256) view returns (bytes32)\"\n                                                                    }\n                                                                },\n                                                                \"id\": 691,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"kind\": \"functionCall\",\n                                                                \"lValueRequested\": false,\n                                                                \"names\": [],\n                                                                \"nodeType\": \"FunctionCall\",\n                                                                \"src\": \"8220:68:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                                    \"typeString\": \"bytes32\"\n                                                                }\n                                                            }\n                                                        ],\n                                                        \"expression\": {\n                                                            \"argumentTypes\": [\n                                                                {\n                                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                    \"typeString\": \"contract IERC20\"\n                                                                },\n                                                                {\n                                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                                    \"typeString\": \"bytes32\"\n                                                                }\n                                                            ],\n                                                            \"expression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"id\": 683,\n                                                                \"name\": \"CTHelpers\",\n                                                                \"nodeType\": \"Identifier\",\n                                                                \"overloadedDeclarations\": [],\n                                                                \"referencedDeclaration\": 298,\n                                                                \"src\": \"8179:9:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                                    \"typeString\": \"type(library CTHelpers)\"\n                                                                }\n                                                            },\n                                                            \"id\": 684,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": false,\n                                                            \"lValueRequested\": false,\n                                                            \"memberName\": \"getPositionId\",\n                                                            \"nodeType\": \"MemberAccess\",\n                                                            \"referencedDeclaration\": 297,\n                                                            \"src\": \"8179:23:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_function_internal_pure$_t_contract$_IERC20_$2437_$_t_bytes32_$returns$_t_uint256_$\",\n                                                                \"typeString\": \"function (contract IERC20,bytes32) pure returns (uint256)\"\n                                                            }\n                                                        },\n                                                        \"id\": 692,\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": false,\n                                                        \"isPure\": false,\n                                                        \"kind\": \"functionCall\",\n                                                        \"lValueRequested\": false,\n                                                        \"names\": [],\n                                                        \"nodeType\": \"FunctionCall\",\n                                                        \"src\": \"8179:110:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"src\": \"8162:127:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"id\": 694,\n                                                \"nodeType\": \"ExpressionStatement\",\n                                                \"src\": \"8162:127:1\"\n                                            },\n                                            {\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 699,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"leftHandSide\": {\n                                                        \"argumentTypes\": null,\n                                                        \"baseExpression\": {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 695,\n                                                            \"name\": \"amounts\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 630,\n                                                            \"src\": \"8303:7:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                                                \"typeString\": \"uint256[] memory\"\n                                                            }\n                                                        },\n                                                        \"id\": 697,\n                                                        \"indexExpression\": {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 696,\n                                                            \"name\": \"i\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 639,\n                                                            \"src\": \"8311:1:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        },\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": true,\n                                                        \"isPure\": false,\n                                                        \"lValueRequested\": true,\n                                                        \"nodeType\": \"IndexAccess\",\n                                                        \"src\": \"8303:10:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"nodeType\": \"Assignment\",\n                                                    \"operator\": \"=\",\n                                                    \"rightHandSide\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 698,\n                                                        \"name\": \"amount\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 578,\n                                                        \"src\": \"8316:6:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"src\": \"8303:19:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"id\": 700,\n                                                \"nodeType\": \"ExpressionStatement\",\n                                                \"src\": \"8303:19:1\"\n                                            }\n                                        ]\n                                    },\n                                    \"condition\": {\n                                        \"argumentTypes\": null,\n                                        \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        },\n                                        \"id\": 645,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"leftExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"id\": 642,\n                                            \"name\": \"i\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 639,\n                                            \"src\": \"7868:1:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"nodeType\": \"BinaryOperation\",\n                                        \"operator\": \"<\",\n                                        \"rightExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"expression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 643,\n                                                \"name\": \"partition\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 576,\n                                                \"src\": \"7872:9:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                    \"typeString\": \"uint256[] calldata\"\n                                                }\n                                            },\n                                            \"id\": 644,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"memberName\": \"length\",\n                                            \"nodeType\": \"MemberAccess\",\n                                            \"referencedDeclaration\": null,\n                                            \"src\": \"7872:16:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"src\": \"7868:20:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bool\",\n                                            \"typeString\": \"bool\"\n                                        }\n                                    },\n                                    \"id\": 702,\n                                    \"initializationExpression\": {\n                                        \"assignments\": [639],\n                                        \"declarations\": [\n                                            {\n                                                \"constant\": false,\n                                                \"id\": 639,\n                                                \"name\": \"i\",\n                                                \"nodeType\": \"VariableDeclaration\",\n                                                \"scope\": 702,\n                                                \"src\": \"7856:6:1\",\n                                                \"stateVariable\": false,\n                                                \"storageLocation\": \"default\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                \"typeName\": {\n                                                    \"id\": 638,\n                                                    \"name\": \"uint\",\n                                                    \"nodeType\": \"ElementaryTypeName\",\n                                                    \"src\": \"7856:4:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"value\": null,\n                                                \"visibility\": \"internal\"\n                                            }\n                                        ],\n                                        \"id\": 641,\n                                        \"initialValue\": {\n                                            \"argumentTypes\": null,\n                                            \"hexValue\": \"30\",\n                                            \"id\": 640,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": true,\n                                            \"kind\": \"number\",\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"Literal\",\n                                            \"src\": \"7865:1:1\",\n                                            \"subdenomination\": null,\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                \"typeString\": \"int_const 0\"\n                                            },\n                                            \"value\": \"0\"\n                                        },\n                                        \"nodeType\": \"VariableDeclarationStatement\",\n                                        \"src\": \"7856:10:1\"\n                                    },\n                                    \"loopExpression\": {\n                                        \"expression\": {\n                                            \"argumentTypes\": null,\n                                            \"id\": 647,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"UnaryOperation\",\n                                            \"operator\": \"++\",\n                                            \"prefix\": false,\n                                            \"src\": \"7890:3:1\",\n                                            \"subExpression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 646,\n                                                \"name\": \"i\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 639,\n                                                \"src\": \"7890:1:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            },\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"id\": 648,\n                                        \"nodeType\": \"ExpressionStatement\",\n                                        \"src\": \"7890:3:1\"\n                                    },\n                                    \"nodeType\": \"ForStatement\",\n                                    \"src\": \"7851:482:1\"\n                                },\n                                {\n                                    \"condition\": {\n                                        \"argumentTypes\": null,\n                                        \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        },\n                                        \"id\": 705,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"leftExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"id\": 703,\n                                            \"name\": \"freeIndexSet\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 613,\n                                            \"src\": \"8347:12:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"nodeType\": \"BinaryOperation\",\n                                        \"operator\": \"==\",\n                                        \"rightExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"hexValue\": \"30\",\n                                            \"id\": 704,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": true,\n                                            \"kind\": \"number\",\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"Literal\",\n                                            \"src\": \"8363:1:1\",\n                                            \"subdenomination\": null,\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                \"typeString\": \"int_const 0\"\n                                            },\n                                            \"value\": \"0\"\n                                        },\n                                        \"src\": \"8347:17:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bool\",\n                                            \"typeString\": \"bool\"\n                                        }\n                                    },\n                                    \"falseBody\": {\n                                        \"id\": 757,\n                                        \"nodeType\": \"Block\",\n                                        \"src\": \"8868:523:1\",\n                                        \"statements\": [\n                                            {\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"arguments\": [\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"expression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"id\": 740,\n                                                                \"name\": \"msg\",\n                                                                \"nodeType\": \"Identifier\",\n                                                                \"overloadedDeclarations\": [],\n                                                                \"referencedDeclaration\": 2471,\n                                                                \"src\": \"9165:3:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_magic_message\",\n                                                                    \"typeString\": \"msg\"\n                                                                }\n                                                            },\n                                                            \"id\": 741,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": false,\n                                                            \"lValueRequested\": false,\n                                                            \"memberName\": \"sender\",\n                                                            \"nodeType\": \"MemberAccess\",\n                                                            \"referencedDeclaration\": null,\n                                                            \"src\": \"9165:10:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_address_payable\",\n                                                                \"typeString\": \"address payable\"\n                                                            }\n                                                        },\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"arguments\": [\n                                                                {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 744,\n                                                                    \"name\": \"collateralToken\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 569,\n                                                                    \"src\": \"9217:15:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                        \"typeString\": \"contract IERC20\"\n                                                                    }\n                                                                },\n                                                                {\n                                                                    \"argumentTypes\": null,\n                                                                    \"arguments\": [\n                                                                        {\n                                                                            \"argumentTypes\": null,\n                                                                            \"id\": 747,\n                                                                            \"name\": \"parentCollectionId\",\n                                                                            \"nodeType\": \"Identifier\",\n                                                                            \"overloadedDeclarations\": [],\n                                                                            \"referencedDeclaration\": 571,\n                                                                            \"src\": \"9280:18:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_bytes32\",\n                                                                                \"typeString\": \"bytes32\"\n                                                                            }\n                                                                        },\n                                                                        {\n                                                                            \"argumentTypes\": null,\n                                                                            \"id\": 748,\n                                                                            \"name\": \"conditionId\",\n                                                                            \"nodeType\": \"Identifier\",\n                                                                            \"overloadedDeclarations\": [],\n                                                                            \"referencedDeclaration\": 573,\n                                                                            \"src\": \"9300:11:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_bytes32\",\n                                                                                \"typeString\": \"bytes32\"\n                                                                            }\n                                                                        },\n                                                                        {\n                                                                            \"argumentTypes\": null,\n                                                                            \"commonType\": {\n                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                \"typeString\": \"uint256\"\n                                                                            },\n                                                                            \"id\": 751,\n                                                                            \"isConstant\": false,\n                                                                            \"isLValue\": false,\n                                                                            \"isPure\": false,\n                                                                            \"lValueRequested\": false,\n                                                                            \"leftExpression\": {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 749,\n                                                                                \"name\": \"fullIndexSet\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 604,\n                                                                                \"src\": \"9313:12:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                                    \"typeString\": \"uint256\"\n                                                                                }\n                                                                            },\n                                                                            \"nodeType\": \"BinaryOperation\",\n                                                                            \"operator\": \"^\",\n                                                                            \"rightExpression\": {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 750,\n                                                                                \"name\": \"freeIndexSet\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 613,\n                                                                                \"src\": \"9328:12:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                                    \"typeString\": \"uint256\"\n                                                                                }\n                                                                            },\n                                                                            \"src\": \"9313:27:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                \"typeString\": \"uint256\"\n                                                                            }\n                                                                        }\n                                                                    ],\n                                                                    \"expression\": {\n                                                                        \"argumentTypes\": [\n                                                                            {\n                                                                                \"typeIdentifier\": \"t_bytes32\",\n                                                                                \"typeString\": \"bytes32\"\n                                                                            },\n                                                                            {\n                                                                                \"typeIdentifier\": \"t_bytes32\",\n                                                                                \"typeString\": \"bytes32\"\n                                                                            },\n                                                                            {\n                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                \"typeString\": \"uint256\"\n                                                                            }\n                                                                        ],\n                                                                        \"expression\": {\n                                                                            \"argumentTypes\": null,\n                                                                            \"id\": 745,\n                                                                            \"name\": \"CTHelpers\",\n                                                                            \"nodeType\": \"Identifier\",\n                                                                            \"overloadedDeclarations\": [],\n                                                                            \"referencedDeclaration\": 298,\n                                                                            \"src\": \"9254:9:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                                                \"typeString\": \"type(library CTHelpers)\"\n                                                                            }\n                                                                        },\n                                                                        \"id\": 746,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": false,\n                                                                        \"lValueRequested\": false,\n                                                                        \"memberName\": \"getCollectionId\",\n                                                                        \"nodeType\": \"MemberAccess\",\n                                                                        \"referencedDeclaration\": 277,\n                                                                        \"src\": \"9254:25:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$\",\n                                                                            \"typeString\": \"function (bytes32,bytes32,uint256) view returns (bytes32)\"\n                                                                        }\n                                                                    },\n                                                                    \"id\": 752,\n                                                                    \"isConstant\": false,\n                                                                    \"isLValue\": false,\n                                                                    \"isPure\": false,\n                                                                    \"kind\": \"functionCall\",\n                                                                    \"lValueRequested\": false,\n                                                                    \"names\": [],\n                                                                    \"nodeType\": \"FunctionCall\",\n                                                                    \"src\": \"9254:87:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_bytes32\",\n                                                                        \"typeString\": \"bytes32\"\n                                                                    }\n                                                                }\n                                                            ],\n                                                            \"expression\": {\n                                                                \"argumentTypes\": [\n                                                                    {\n                                                                        \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                        \"typeString\": \"contract IERC20\"\n                                                                    },\n                                                                    {\n                                                                        \"typeIdentifier\": \"t_bytes32\",\n                                                                        \"typeString\": \"bytes32\"\n                                                                    }\n                                                                ],\n                                                                \"expression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 742,\n                                                                    \"name\": \"CTHelpers\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 298,\n                                                                    \"src\": \"9193:9:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                                        \"typeString\": \"type(library CTHelpers)\"\n                                                                    }\n                                                                },\n                                                                \"id\": 743,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"lValueRequested\": false,\n                                                                \"memberName\": \"getPositionId\",\n                                                                \"nodeType\": \"MemberAccess\",\n                                                                \"referencedDeclaration\": 297,\n                                                                \"src\": \"9193:23:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_function_internal_pure$_t_contract$_IERC20_$2437_$_t_bytes32_$returns$_t_uint256_$\",\n                                                                    \"typeString\": \"function (contract IERC20,bytes32) pure returns (uint256)\"\n                                                                }\n                                                            },\n                                                            \"id\": 753,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": false,\n                                                            \"kind\": \"functionCall\",\n                                                            \"lValueRequested\": false,\n                                                            \"names\": [],\n                                                            \"nodeType\": \"FunctionCall\",\n                                                            \"src\": \"9193:149:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        },\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 754,\n                                                            \"name\": \"amount\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 578,\n                                                            \"src\": \"9360:6:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        }\n                                                    ],\n                                                    \"expression\": {\n                                                        \"argumentTypes\": [\n                                                            {\n                                                                \"typeIdentifier\": \"t_address_payable\",\n                                                                \"typeString\": \"address payable\"\n                                                            },\n                                                            {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            },\n                                                            {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        ],\n                                                        \"id\": 739,\n                                                        \"name\": \"_burn\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 1873,\n                                                        \"src\": \"9142:5:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$\",\n                                                            \"typeString\": \"function (address,uint256,uint256)\"\n                                                        }\n                                                    },\n                                                    \"id\": 755,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"kind\": \"functionCall\",\n                                                    \"lValueRequested\": false,\n                                                    \"names\": [],\n                                                    \"nodeType\": \"FunctionCall\",\n                                                    \"src\": \"9142:238:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_tuple$__$\",\n                                                        \"typeString\": \"tuple()\"\n                                                    }\n                                                },\n                                                \"id\": 756,\n                                                \"nodeType\": \"ExpressionStatement\",\n                                                \"src\": \"9142:238:1\"\n                                            }\n                                        ]\n                                    },\n                                    \"id\": 758,\n                                    \"nodeType\": \"IfStatement\",\n                                    \"src\": \"8343:1048:1\",\n                                    \"trueBody\": {\n                                        \"id\": 738,\n                                        \"nodeType\": \"Block\",\n                                        \"src\": \"8366:496:1\",\n                                        \"statements\": [\n                                            {\n                                                \"condition\": {\n                                                    \"argumentTypes\": null,\n                                                    \"commonType\": {\n                                                        \"typeIdentifier\": \"t_bytes32\",\n                                                        \"typeString\": \"bytes32\"\n                                                    },\n                                                    \"id\": 710,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"leftExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 706,\n                                                        \"name\": \"parentCollectionId\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 571,\n                                                        \"src\": \"8470:18:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_bytes32\",\n                                                            \"typeString\": \"bytes32\"\n                                                        }\n                                                    },\n                                                    \"nodeType\": \"BinaryOperation\",\n                                                    \"operator\": \"==\",\n                                                    \"rightExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"arguments\": [\n                                                            {\n                                                                \"argumentTypes\": null,\n                                                                \"hexValue\": \"30\",\n                                                                \"id\": 708,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": true,\n                                                                \"kind\": \"number\",\n                                                                \"lValueRequested\": false,\n                                                                \"nodeType\": \"Literal\",\n                                                                \"src\": \"8500:1:1\",\n                                                                \"subdenomination\": null,\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                                    \"typeString\": \"int_const 0\"\n                                                                },\n                                                                \"value\": \"0\"\n                                                            }\n                                                        ],\n                                                        \"expression\": {\n                                                            \"argumentTypes\": [\n                                                                {\n                                                                    \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                                    \"typeString\": \"int_const 0\"\n                                                                }\n                                                            ],\n                                                            \"id\": 707,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": true,\n                                                            \"lValueRequested\": false,\n                                                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                                                            \"src\": \"8492:7:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_type$_t_bytes32_$\",\n                                                                \"typeString\": \"type(bytes32)\"\n                                                            },\n                                                            \"typeName\": \"bytes32\"\n                                                        },\n                                                        \"id\": 709,\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": false,\n                                                        \"isPure\": true,\n                                                        \"kind\": \"typeConversion\",\n                                                        \"lValueRequested\": false,\n                                                        \"names\": [],\n                                                        \"nodeType\": \"FunctionCall\",\n                                                        \"src\": \"8492:10:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_bytes32\",\n                                                            \"typeString\": \"bytes32\"\n                                                        }\n                                                    },\n                                                    \"src\": \"8470:32:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_bool\",\n                                                        \"typeString\": \"bool\"\n                                                    }\n                                                },\n                                                \"falseBody\": {\n                                                    \"id\": 736,\n                                                    \"nodeType\": \"Block\",\n                                                    \"src\": \"8654:198:1\",\n                                                    \"statements\": [\n                                                        {\n                                                            \"expression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"arguments\": [\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"expression\": {\n                                                                            \"argumentTypes\": null,\n                                                                            \"id\": 726,\n                                                                            \"name\": \"msg\",\n                                                                            \"nodeType\": \"Identifier\",\n                                                                            \"overloadedDeclarations\": [],\n                                                                            \"referencedDeclaration\": 2471,\n                                                                            \"src\": \"8699:3:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_magic_message\",\n                                                                                \"typeString\": \"msg\"\n                                                                            }\n                                                                        },\n                                                                        \"id\": 727,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": false,\n                                                                        \"lValueRequested\": false,\n                                                                        \"memberName\": \"sender\",\n                                                                        \"nodeType\": \"MemberAccess\",\n                                                                        \"referencedDeclaration\": null,\n                                                                        \"src\": \"8699:10:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_address_payable\",\n                                                                            \"typeString\": \"address payable\"\n                                                                        }\n                                                                    },\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"arguments\": [\n                                                                            {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 730,\n                                                                                \"name\": \"collateralToken\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 569,\n                                                                                \"src\": \"8755:15:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                                    \"typeString\": \"contract IERC20\"\n                                                                                }\n                                                                            },\n                                                                            {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 731,\n                                                                                \"name\": \"parentCollectionId\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 571,\n                                                                                \"src\": \"8772:18:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                                                    \"typeString\": \"bytes32\"\n                                                                                }\n                                                                            }\n                                                                        ],\n                                                                        \"expression\": {\n                                                                            \"argumentTypes\": [\n                                                                                {\n                                                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                                    \"typeString\": \"contract IERC20\"\n                                                                                },\n                                                                                {\n                                                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                                                    \"typeString\": \"bytes32\"\n                                                                                }\n                                                                            ],\n                                                                            \"expression\": {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 728,\n                                                                                \"name\": \"CTHelpers\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 298,\n                                                                                \"src\": \"8731:9:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                                                    \"typeString\": \"type(library CTHelpers)\"\n                                                                                }\n                                                                            },\n                                                                            \"id\": 729,\n                                                                            \"isConstant\": false,\n                                                                            \"isLValue\": false,\n                                                                            \"isPure\": false,\n                                                                            \"lValueRequested\": false,\n                                                                            \"memberName\": \"getPositionId\",\n                                                                            \"nodeType\": \"MemberAccess\",\n                                                                            \"referencedDeclaration\": 297,\n                                                                            \"src\": \"8731:23:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_function_internal_pure$_t_contract$_IERC20_$2437_$_t_bytes32_$returns$_t_uint256_$\",\n                                                                                \"typeString\": \"function (contract IERC20,bytes32) pure returns (uint256)\"\n                                                                            }\n                                                                        },\n                                                                        \"id\": 732,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": false,\n                                                                        \"kind\": \"functionCall\",\n                                                                        \"lValueRequested\": false,\n                                                                        \"names\": [],\n                                                                        \"nodeType\": \"FunctionCall\",\n                                                                        \"src\": \"8731:60:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    },\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"id\": 733,\n                                                                        \"name\": \"amount\",\n                                                                        \"nodeType\": \"Identifier\",\n                                                                        \"overloadedDeclarations\": [],\n                                                                        \"referencedDeclaration\": 578,\n                                                                        \"src\": \"8813:6:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    }\n                                                                ],\n                                                                \"expression\": {\n                                                                    \"argumentTypes\": [\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_address_payable\",\n                                                                            \"typeString\": \"address payable\"\n                                                                        },\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        },\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    ],\n                                                                    \"id\": 725,\n                                                                    \"name\": \"_burn\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 1873,\n                                                                    \"src\": \"8672:5:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$\",\n                                                                        \"typeString\": \"function (address,uint256,uint256)\"\n                                                                    }\n                                                                },\n                                                                \"id\": 734,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"kind\": \"functionCall\",\n                                                                \"lValueRequested\": false,\n                                                                \"names\": [],\n                                                                \"nodeType\": \"FunctionCall\",\n                                                                \"src\": \"8672:165:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_tuple$__$\",\n                                                                    \"typeString\": \"tuple()\"\n                                                                }\n                                                            },\n                                                            \"id\": 735,\n                                                            \"nodeType\": \"ExpressionStatement\",\n                                                            \"src\": \"8672:165:1\"\n                                                        }\n                                                    ]\n                                                },\n                                                \"id\": 737,\n                                                \"nodeType\": \"IfStatement\",\n                                                \"src\": \"8466:386:1\",\n                                                \"trueBody\": {\n                                                    \"id\": 724,\n                                                    \"nodeType\": \"Block\",\n                                                    \"src\": \"8504:144:1\",\n                                                    \"statements\": [\n                                                        {\n                                                            \"expression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"arguments\": [\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"arguments\": [\n                                                                            {\n                                                                                \"argumentTypes\": null,\n                                                                                \"expression\": {\n                                                                                    \"argumentTypes\": null,\n                                                                                    \"id\": 714,\n                                                                                    \"name\": \"msg\",\n                                                                                    \"nodeType\": \"Identifier\",\n                                                                                    \"overloadedDeclarations\": [],\n                                                                                    \"referencedDeclaration\": 2471,\n                                                                                    \"src\": \"8559:3:1\",\n                                                                                    \"typeDescriptions\": {\n                                                                                        \"typeIdentifier\": \"t_magic_message\",\n                                                                                        \"typeString\": \"msg\"\n                                                                                    }\n                                                                                },\n                                                                                \"id\": 715,\n                                                                                \"isConstant\": false,\n                                                                                \"isLValue\": false,\n                                                                                \"isPure\": false,\n                                                                                \"lValueRequested\": false,\n                                                                                \"memberName\": \"sender\",\n                                                                                \"nodeType\": \"MemberAccess\",\n                                                                                \"referencedDeclaration\": null,\n                                                                                \"src\": \"8559:10:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                                                    \"typeString\": \"address payable\"\n                                                                                }\n                                                                            },\n                                                                            {\n                                                                                \"argumentTypes\": null,\n                                                                                \"arguments\": [\n                                                                                    {\n                                                                                        \"argumentTypes\": null,\n                                                                                        \"id\": 717,\n                                                                                        \"name\": \"this\",\n                                                                                        \"nodeType\": \"Identifier\",\n                                                                                        \"overloadedDeclarations\": [],\n                                                                                        \"referencedDeclaration\": 2503,\n                                                                                        \"src\": \"8579:4:1\",\n                                                                                        \"typeDescriptions\": {\n                                                                                            \"typeIdentifier\": \"t_contract$_ConditionalTokens_$1266\",\n                                                                                            \"typeString\": \"contract ConditionalTokens\"\n                                                                                        }\n                                                                                    }\n                                                                                ],\n                                                                                \"expression\": {\n                                                                                    \"argumentTypes\": [\n                                                                                        {\n                                                                                            \"typeIdentifier\": \"t_contract$_ConditionalTokens_$1266\",\n                                                                                            \"typeString\": \"contract ConditionalTokens\"\n                                                                                        }\n                                                                                    ],\n                                                                                    \"id\": 716,\n                                                                                    \"isConstant\": false,\n                                                                                    \"isLValue\": false,\n                                                                                    \"isPure\": true,\n                                                                                    \"lValueRequested\": false,\n                                                                                    \"nodeType\": \"ElementaryTypeNameExpression\",\n                                                                                    \"src\": \"8571:7:1\",\n                                                                                    \"typeDescriptions\": {\n                                                                                        \"typeIdentifier\": \"t_type$_t_address_$\",\n                                                                                        \"typeString\": \"type(address)\"\n                                                                                    },\n                                                                                    \"typeName\": \"address\"\n                                                                                },\n                                                                                \"id\": 718,\n                                                                                \"isConstant\": false,\n                                                                                \"isLValue\": false,\n                                                                                \"isPure\": false,\n                                                                                \"kind\": \"typeConversion\",\n                                                                                \"lValueRequested\": false,\n                                                                                \"names\": [],\n                                                                                \"nodeType\": \"FunctionCall\",\n                                                                                \"src\": \"8571:13:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_address\",\n                                                                                    \"typeString\": \"address\"\n                                                                                }\n                                                                            },\n                                                                            {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 719,\n                                                                                \"name\": \"amount\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 578,\n                                                                                \"src\": \"8586:6:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                                    \"typeString\": \"uint256\"\n                                                                                }\n                                                                            }\n                                                                        ],\n                                                                        \"expression\": {\n                                                                            \"argumentTypes\": [\n                                                                                {\n                                                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                                                    \"typeString\": \"address payable\"\n                                                                                },\n                                                                                {\n                                                                                    \"typeIdentifier\": \"t_address\",\n                                                                                    \"typeString\": \"address\"\n                                                                                },\n                                                                                {\n                                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                                    \"typeString\": \"uint256\"\n                                                                                }\n                                                                            ],\n                                                                            \"expression\": {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 712,\n                                                                                \"name\": \"collateralToken\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 569,\n                                                                                \"src\": \"8530:15:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                                    \"typeString\": \"contract IERC20\"\n                                                                                }\n                                                                            },\n                                                                            \"id\": 713,\n                                                                            \"isConstant\": false,\n                                                                            \"isLValue\": false,\n                                                                            \"isPure\": false,\n                                                                            \"lValueRequested\": false,\n                                                                            \"memberName\": \"transferFrom\",\n                                                                            \"nodeType\": \"MemberAccess\",\n                                                                            \"referencedDeclaration\": 2420,\n                                                                            \"src\": \"8530:28:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$\",\n                                                                                \"typeString\": \"function (address,address,uint256) external returns (bool)\"\n                                                                            }\n                                                                        },\n                                                                        \"id\": 720,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": false,\n                                                                        \"kind\": \"functionCall\",\n                                                                        \"lValueRequested\": false,\n                                                                        \"names\": [],\n                                                                        \"nodeType\": \"FunctionCall\",\n                                                                        \"src\": \"8530:63:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_bool\",\n                                                                            \"typeString\": \"bool\"\n                                                                        }\n                                                                    },\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"hexValue\": \"636f756c64206e6f74207265636569766520636f6c6c61746572616c20746f6b656e73\",\n                                                                        \"id\": 721,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": true,\n                                                                        \"kind\": \"string\",\n                                                                        \"lValueRequested\": false,\n                                                                        \"nodeType\": \"Literal\",\n                                                                        \"src\": \"8595:37:1\",\n                                                                        \"subdenomination\": null,\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_stringliteral_78876cf43ab8535e33b68e15004e5c9de6676e3ca25f51ac6b556de3a2a1b5dc\",\n                                                                            \"typeString\": \"literal_string \\\"could not receive collateral tokens\\\"\"\n                                                                        },\n                                                                        \"value\": \"could not receive collateral tokens\"\n                                                                    }\n                                                                ],\n                                                                \"expression\": {\n                                                                    \"argumentTypes\": [\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_bool\",\n                                                                            \"typeString\": \"bool\"\n                                                                        },\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_stringliteral_78876cf43ab8535e33b68e15004e5c9de6676e3ca25f51ac6b556de3a2a1b5dc\",\n                                                                            \"typeString\": \"literal_string \\\"could not receive collateral tokens\\\"\"\n                                                                        }\n                                                                    ],\n                                                                    \"id\": 711,\n                                                                    \"name\": \"require\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [2474, 2475],\n                                                                    \"referencedDeclaration\": 2475,\n                                                                    \"src\": \"8522:7:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                                        \"typeString\": \"function (bool,string memory) pure\"\n                                                                    }\n                                                                },\n                                                                \"id\": 722,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"kind\": \"functionCall\",\n                                                                \"lValueRequested\": false,\n                                                                \"names\": [],\n                                                                \"nodeType\": \"FunctionCall\",\n                                                                \"src\": \"8522:111:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_tuple$__$\",\n                                                                    \"typeString\": \"tuple()\"\n                                                                }\n                                                            },\n                                                            \"id\": 723,\n                                                            \"nodeType\": \"ExpressionStatement\",\n                                                            \"src\": \"8522:111:1\"\n                                                        }\n                                                    ]\n                                                }\n                                            }\n                                        ]\n                                    }\n                                },\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 760,\n                                                    \"name\": \"msg\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 2471,\n                                                    \"src\": \"9425:3:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_magic_message\",\n                                                        \"typeString\": \"msg\"\n                                                    }\n                                                },\n                                                \"id\": 761,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"memberName\": \"sender\",\n                                                \"nodeType\": \"MemberAccess\",\n                                                \"referencedDeclaration\": null,\n                                                \"src\": \"9425:10:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                    \"typeString\": \"address payable\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 762,\n                                                \"name\": \"positionIds\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 619,\n                                                \"src\": \"9501:11:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                                    \"typeString\": \"uint256[] memory\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 763,\n                                                \"name\": \"amounts\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 630,\n                                                \"src\": \"9526:7:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                                    \"typeString\": \"uint256[] memory\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"hexValue\": \"\",\n                                                \"id\": 764,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": true,\n                                                \"kind\": \"string\",\n                                                \"lValueRequested\": false,\n                                                \"nodeType\": \"Literal\",\n                                                \"src\": \"9547:2:1\",\n                                                \"subdenomination\": null,\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470\",\n                                                    \"typeString\": \"literal_string \\\"\\\"\"\n                                                },\n                                                \"value\": \"\"\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                    \"typeString\": \"address payable\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                                    \"typeString\": \"uint256[] memory\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                                    \"typeString\": \"uint256[] memory\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470\",\n                                                    \"typeString\": \"literal_string \\\"\\\"\"\n                                                }\n                                            ],\n                                            \"id\": 759,\n                                            \"name\": \"_batchMint\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 1837,\n                                            \"src\": \"9401:10:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$\",\n                                                \"typeString\": \"function (address,uint256[] memory,uint256[] memory,bytes memory)\"\n                                            }\n                                        },\n                                        \"id\": 765,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"9401:158:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 766,\n                                    \"nodeType\": \"ExpressionStatement\",\n                                    \"src\": \"9401:158:1\"\n                                },\n                                {\n                                    \"eventCall\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 768,\n                                                    \"name\": \"msg\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 2471,\n                                                    \"src\": \"9588:3:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_magic_message\",\n                                                        \"typeString\": \"msg\"\n                                                    }\n                                                },\n                                                \"id\": 769,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"memberName\": \"sender\",\n                                                \"nodeType\": \"MemberAccess\",\n                                                \"referencedDeclaration\": null,\n                                                \"src\": \"9588:10:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                    \"typeString\": \"address payable\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 770,\n                                                \"name\": \"collateralToken\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 569,\n                                                \"src\": \"9600:15:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                    \"typeString\": \"contract IERC20\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 771,\n                                                \"name\": \"parentCollectionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 571,\n                                                \"src\": \"9617:18:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 772,\n                                                \"name\": \"conditionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 573,\n                                                \"src\": \"9637:11:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 773,\n                                                \"name\": \"partition\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 576,\n                                                \"src\": \"9650:9:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                    \"typeString\": \"uint256[] calldata\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 774,\n                                                \"name\": \"amount\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 578,\n                                                \"src\": \"9661:6:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                    \"typeString\": \"address payable\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                    \"typeString\": \"contract IERC20\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                    \"typeString\": \"uint256[] calldata\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            ],\n                                            \"id\": 767,\n                                            \"name\": \"PositionSplit\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 346,\n                                            \"src\": \"9574:13:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$2437_$_t_bytes32_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$__$\",\n                                                \"typeString\": \"function (address,contract IERC20,bytes32,bytes32,uint256[] memory,uint256)\"\n                                            }\n                                        },\n                                        \"id\": 775,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"9574:94:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 776,\n                                    \"nodeType\": \"EmitStatement\",\n                                    \"src\": \"9569:99:1\"\n                                }\n                            ]\n                        },\n                        \"documentation\": \"@dev This function splits a position. If splitting from the collateral, this contract will attempt to transfer `amount` collateral from the message sender to itself. Otherwise, this contract will burn `amount` stake held by the message sender in the position being split worth of EIP 1155 tokens. Regardless, if successful, `amount` stake will be minted in the split target positions. If any of the transfers, mints, or burns fail, the transaction will revert. The transaction will also revert if the given partition is trivial, invalid, or refers to more slots than the condition is prepared with.\\n @param collateralToken The address of the positions' backing collateral token.\\n @param parentCollectionId The ID of the outcome collections common to the position being split and the split target positions. May be null, in which only the collateral is shared.\\n @param conditionId The ID of the condition to split on.\\n @param partition An array of disjoint index sets representing a nontrivial partition of the outcome slots of the given condition. E.g. A|B and C but not A|B and B|C (is not disjoint). Each element's a number which, together with the condition, represents the outcome collection. E.g. 0b110 is A|B, 0b010 is B, etc.\\n @param amount The amount of collateral or stake to split.\",\n                        \"implemented\": true,\n                        \"kind\": \"function\",\n                        \"modifiers\": [],\n                        \"name\": \"splitPosition\",\n                        \"parameters\": {\n                            \"id\": 579,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 569,\n                                    \"name\": \"collateralToken\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 778,\n                                    \"src\": \"6983:22:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                        \"typeString\": \"contract IERC20\"\n                                    },\n                                    \"typeName\": {\n                                        \"contractScope\": null,\n                                        \"id\": 568,\n                                        \"name\": \"IERC20\",\n                                        \"nodeType\": \"UserDefinedTypeName\",\n                                        \"referencedDeclaration\": 2437,\n                                        \"src\": \"6983:6:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                            \"typeString\": \"contract IERC20\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 571,\n                                    \"name\": \"parentCollectionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 778,\n                                    \"src\": \"7015:26:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 570,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"7015:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 573,\n                                    \"name\": \"conditionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 778,\n                                    \"src\": \"7051:19:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 572,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"7051:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 576,\n                                    \"name\": \"partition\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 778,\n                                    \"src\": \"7080:25:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"calldata\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                        \"typeString\": \"uint256[]\"\n                                    },\n                                    \"typeName\": {\n                                        \"baseType\": {\n                                            \"id\": 574,\n                                            \"name\": \"uint\",\n                                            \"nodeType\": \"ElementaryTypeName\",\n                                            \"src\": \"7080:4:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"id\": 575,\n                                        \"length\": null,\n                                        \"nodeType\": \"ArrayTypeName\",\n                                        \"src\": \"7080:6:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                            \"typeString\": \"uint256[]\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 578,\n                                    \"name\": \"amount\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 778,\n                                    \"src\": \"7115:11:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 577,\n                                        \"name\": \"uint\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"7115:4:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"6973:159:1\"\n                        },\n                        \"returnParameters\": {\n                            \"id\": 580,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [],\n                            \"src\": \"7142:0:1\"\n                        },\n                        \"scope\": 1266,\n                        \"stateMutability\": \"nonpayable\",\n                        \"superFunction\": null,\n                        \"visibility\": \"external\"\n                    },\n                    {\n                        \"id\": 987,\n                        \"nodeType\": \"FunctionDefinition\",\n                        \"src\": \"9681:2077:1\",\n                        \"body\": {\n                            \"id\": 986,\n                            \"nodeType\": \"Block\",\n                            \"src\": \"9873:1885:1\",\n                            \"statements\": [\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"commonType\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                \"id\": 796,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"leftExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"expression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 793,\n                                                        \"name\": \"partition\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 787,\n                                                        \"src\": \"9891:9:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                            \"typeString\": \"uint256[] calldata\"\n                                                        }\n                                                    },\n                                                    \"id\": 794,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"memberName\": \"length\",\n                                                    \"nodeType\": \"MemberAccess\",\n                                                    \"referencedDeclaration\": null,\n                                                    \"src\": \"9891:16:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"BinaryOperation\",\n                                                \"operator\": \">\",\n                                                \"rightExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"hexValue\": \"31\",\n                                                    \"id\": 795,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": true,\n                                                    \"kind\": \"number\",\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"Literal\",\n                                                    \"src\": \"9910:1:1\",\n                                                    \"subdenomination\": null,\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_rational_1_by_1\",\n                                                        \"typeString\": \"int_const 1\"\n                                                    },\n                                                    \"value\": \"1\"\n                                                },\n                                                \"src\": \"9891:20:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"hexValue\": \"676f7420656d707479206f722073696e676c65746f6e20706172746974696f6e\",\n                                                \"id\": 797,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": true,\n                                                \"kind\": \"string\",\n                                                \"lValueRequested\": false,\n                                                \"nodeType\": \"Literal\",\n                                                \"src\": \"9913:34:1\",\n                                                \"subdenomination\": null,\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_stringliteral_8ee17141ea2791412c04ba41356365d6f264a90f211baef05b35a8c13c0585ff\",\n                                                    \"typeString\": \"literal_string \\\"got empty or singleton partition\\\"\"\n                                                },\n                                                \"value\": \"got empty or singleton partition\"\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_stringliteral_8ee17141ea2791412c04ba41356365d6f264a90f211baef05b35a8c13c0585ff\",\n                                                    \"typeString\": \"literal_string \\\"got empty or singleton partition\\\"\"\n                                                }\n                                            ],\n                                            \"id\": 792,\n                                            \"name\": \"require\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [2474, 2475],\n                                            \"referencedDeclaration\": 2475,\n                                            \"src\": \"9883:7:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                \"typeString\": \"function (bool,string memory) pure\"\n                                            }\n                                        },\n                                        \"id\": 798,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"9883:65:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 799,\n                                    \"nodeType\": \"ExpressionStatement\",\n                                    \"src\": \"9883:65:1\"\n                                },\n                                {\n                                    \"assignments\": [801],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 801,\n                                            \"name\": \"outcomeSlotCount\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 986,\n                                            \"src\": \"9958:21:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"default\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            },\n                                            \"typeName\": {\n                                                \"id\": 800,\n                                                \"name\": \"uint\",\n                                                \"nodeType\": \"ElementaryTypeName\",\n                                                \"src\": \"9958:4:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 806,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"expression\": {\n                                            \"argumentTypes\": null,\n                                            \"baseExpression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 802,\n                                                \"name\": \"payoutNumerators\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 381,\n                                                \"src\": \"9982:16:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$\",\n                                                    \"typeString\": \"mapping(bytes32 => uint256[] storage ref)\"\n                                                }\n                                            },\n                                            \"id\": 804,\n                                            \"indexExpression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 803,\n                                                \"name\": \"conditionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 784,\n                                                \"src\": \"9999:11:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            \"isConstant\": false,\n                                            \"isLValue\": true,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"IndexAccess\",\n                                            \"src\": \"9982:29:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage\",\n                                                \"typeString\": \"uint256[] storage ref\"\n                                            }\n                                        },\n                                        \"id\": 805,\n                                        \"isConstant\": false,\n                                        \"isLValue\": true,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"memberName\": \"length\",\n                                        \"nodeType\": \"MemberAccess\",\n                                        \"referencedDeclaration\": null,\n                                        \"src\": \"9982:36:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"9958:60:1\"\n                                },\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"commonType\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                \"id\": 810,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"leftExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 808,\n                                                    \"name\": \"outcomeSlotCount\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 801,\n                                                    \"src\": \"10036:16:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"BinaryOperation\",\n                                                \"operator\": \">\",\n                                                \"rightExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"hexValue\": \"30\",\n                                                    \"id\": 809,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": true,\n                                                    \"kind\": \"number\",\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"Literal\",\n                                                    \"src\": \"10055:1:1\",\n                                                    \"subdenomination\": null,\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                        \"typeString\": \"int_const 0\"\n                                                    },\n                                                    \"value\": \"0\"\n                                                },\n                                                \"src\": \"10036:20:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"hexValue\": \"636f6e646974696f6e206e6f7420707265706172656420796574\",\n                                                \"id\": 811,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": true,\n                                                \"kind\": \"string\",\n                                                \"lValueRequested\": false,\n                                                \"nodeType\": \"Literal\",\n                                                \"src\": \"10058:28:1\",\n                                                \"subdenomination\": null,\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_stringliteral_e04bbd75ab4a1437326ef11a696b620d013bedb4db855d7241cc1435c81cd55a\",\n                                                    \"typeString\": \"literal_string \\\"condition not prepared yet\\\"\"\n                                                },\n                                                \"value\": \"condition not prepared yet\"\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_stringliteral_e04bbd75ab4a1437326ef11a696b620d013bedb4db855d7241cc1435c81cd55a\",\n                                                    \"typeString\": \"literal_string \\\"condition not prepared yet\\\"\"\n                                                }\n                                            ],\n                                            \"id\": 807,\n                                            \"name\": \"require\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [2474, 2475],\n                                            \"referencedDeclaration\": 2475,\n                                            \"src\": \"10028:7:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                \"typeString\": \"function (bool,string memory) pure\"\n                                            }\n                                        },\n                                        \"id\": 812,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"10028:59:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 813,\n                                    \"nodeType\": \"ExpressionStatement\",\n                                    \"src\": \"10028:59:1\"\n                                },\n                                {\n                                    \"assignments\": [815],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 815,\n                                            \"name\": \"fullIndexSet\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 986,\n                                            \"src\": \"10098:17:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"default\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            },\n                                            \"typeName\": {\n                                                \"id\": 814,\n                                                \"name\": \"uint\",\n                                                \"nodeType\": \"ElementaryTypeName\",\n                                                \"src\": \"10098:4:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 822,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        },\n                                        \"id\": 821,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"leftExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"components\": [\n                                                {\n                                                    \"argumentTypes\": null,\n                                                    \"commonType\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    },\n                                                    \"id\": 818,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"leftExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"hexValue\": \"31\",\n                                                        \"id\": 816,\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": false,\n                                                        \"isPure\": true,\n                                                        \"kind\": \"number\",\n                                                        \"lValueRequested\": false,\n                                                        \"nodeType\": \"Literal\",\n                                                        \"src\": \"10119:1:1\",\n                                                        \"subdenomination\": null,\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_rational_1_by_1\",\n                                                            \"typeString\": \"int_const 1\"\n                                                        },\n                                                        \"value\": \"1\"\n                                                    },\n                                                    \"nodeType\": \"BinaryOperation\",\n                                                    \"operator\": \"<<\",\n                                                    \"rightExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 817,\n                                                        \"name\": \"outcomeSlotCount\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 801,\n                                                        \"src\": \"10124:16:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"src\": \"10119:21:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                }\n                                            ],\n                                            \"id\": 819,\n                                            \"isConstant\": false,\n                                            \"isInlineArray\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"TupleExpression\",\n                                            \"src\": \"10118:23:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"nodeType\": \"BinaryOperation\",\n                                        \"operator\": \"-\",\n                                        \"rightExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"hexValue\": \"31\",\n                                            \"id\": 820,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": true,\n                                            \"kind\": \"number\",\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"Literal\",\n                                            \"src\": \"10144:1:1\",\n                                            \"subdenomination\": null,\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_rational_1_by_1\",\n                                                \"typeString\": \"int_const 1\"\n                                            },\n                                            \"value\": \"1\"\n                                        },\n                                        \"src\": \"10118:27:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"10098:47:1\"\n                                },\n                                {\n                                    \"assignments\": [824],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 824,\n                                            \"name\": \"freeIndexSet\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 986,\n                                            \"src\": \"10155:17:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"default\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            },\n                                            \"typeName\": {\n                                                \"id\": 823,\n                                                \"name\": \"uint\",\n                                                \"nodeType\": \"ElementaryTypeName\",\n                                                \"src\": \"10155:4:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 826,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"id\": 825,\n                                        \"name\": \"fullIndexSet\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 815,\n                                        \"src\": \"10175:12:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"10155:32:1\"\n                                },\n                                {\n                                    \"assignments\": [830],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 830,\n                                            \"name\": \"positionIds\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 986,\n                                            \"src\": \"10197:25:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"memory\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                                \"typeString\": \"uint256[]\"\n                                            },\n                                            \"typeName\": {\n                                                \"baseType\": {\n                                                    \"id\": 828,\n                                                    \"name\": \"uint\",\n                                                    \"nodeType\": \"ElementaryTypeName\",\n                                                    \"src\": \"10197:4:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"id\": 829,\n                                                \"length\": null,\n                                                \"nodeType\": \"ArrayTypeName\",\n                                                \"src\": \"10197:6:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                                    \"typeString\": \"uint256[]\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 837,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 834,\n                                                    \"name\": \"partition\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 787,\n                                                    \"src\": \"10236:9:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                        \"typeString\": \"uint256[] calldata\"\n                                                    }\n                                                },\n                                                \"id\": 835,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"memberName\": \"length\",\n                                                \"nodeType\": \"MemberAccess\",\n                                                \"referencedDeclaration\": null,\n                                                \"src\": \"10236:16:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            ],\n                                            \"id\": 833,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": true,\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"NewExpression\",\n                                            \"src\": \"10225:10:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$\",\n                                                \"typeString\": \"function (uint256) pure returns (uint256[] memory)\"\n                                            },\n                                            \"typeName\": {\n                                                \"baseType\": {\n                                                    \"id\": 831,\n                                                    \"name\": \"uint\",\n                                                    \"nodeType\": \"ElementaryTypeName\",\n                                                    \"src\": \"10229:4:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"id\": 832,\n                                                \"length\": null,\n                                                \"nodeType\": \"ArrayTypeName\",\n                                                \"src\": \"10229:6:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                                    \"typeString\": \"uint256[]\"\n                                                }\n                                            }\n                                        },\n                                        \"id\": 836,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"10225:28:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory\",\n                                            \"typeString\": \"uint256[] memory\"\n                                        }\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"10197:56:1\"\n                                },\n                                {\n                                    \"assignments\": [841],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 841,\n                                            \"name\": \"amounts\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 986,\n                                            \"src\": \"10263:21:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"memory\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                                \"typeString\": \"uint256[]\"\n                                            },\n                                            \"typeName\": {\n                                                \"baseType\": {\n                                                    \"id\": 839,\n                                                    \"name\": \"uint\",\n                                                    \"nodeType\": \"ElementaryTypeName\",\n                                                    \"src\": \"10263:4:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"id\": 840,\n                                                \"length\": null,\n                                                \"nodeType\": \"ArrayTypeName\",\n                                                \"src\": \"10263:6:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                                    \"typeString\": \"uint256[]\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 848,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 845,\n                                                    \"name\": \"partition\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 787,\n                                                    \"src\": \"10298:9:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                        \"typeString\": \"uint256[] calldata\"\n                                                    }\n                                                },\n                                                \"id\": 846,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"memberName\": \"length\",\n                                                \"nodeType\": \"MemberAccess\",\n                                                \"referencedDeclaration\": null,\n                                                \"src\": \"10298:16:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            ],\n                                            \"id\": 844,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": true,\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"NewExpression\",\n                                            \"src\": \"10287:10:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$\",\n                                                \"typeString\": \"function (uint256) pure returns (uint256[] memory)\"\n                                            },\n                                            \"typeName\": {\n                                                \"baseType\": {\n                                                    \"id\": 842,\n                                                    \"name\": \"uint\",\n                                                    \"nodeType\": \"ElementaryTypeName\",\n                                                    \"src\": \"10291:4:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"id\": 843,\n                                                \"length\": null,\n                                                \"nodeType\": \"ArrayTypeName\",\n                                                \"src\": \"10291:6:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                                    \"typeString\": \"uint256[]\"\n                                                }\n                                            }\n                                        },\n                                        \"id\": 847,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"10287:28:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory\",\n                                            \"typeString\": \"uint256[] memory\"\n                                        }\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"10263:52:1\"\n                                },\n                                {\n                                    \"body\": {\n                                        \"id\": 912,\n                                        \"nodeType\": \"Block\",\n                                        \"src\": \"10369:438:1\",\n                                        \"statements\": [\n                                            {\n                                                \"assignments\": [861],\n                                                \"declarations\": [\n                                                    {\n                                                        \"constant\": false,\n                                                        \"id\": 861,\n                                                        \"name\": \"indexSet\",\n                                                        \"nodeType\": \"VariableDeclaration\",\n                                                        \"scope\": 912,\n                                                        \"src\": \"10383:13:1\",\n                                                        \"stateVariable\": false,\n                                                        \"storageLocation\": \"default\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        },\n                                                        \"typeName\": {\n                                                            \"id\": 860,\n                                                            \"name\": \"uint\",\n                                                            \"nodeType\": \"ElementaryTypeName\",\n                                                            \"src\": \"10383:4:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        },\n                                                        \"value\": null,\n                                                        \"visibility\": \"internal\"\n                                                    }\n                                                ],\n                                                \"id\": 865,\n                                                \"initialValue\": {\n                                                    \"argumentTypes\": null,\n                                                    \"baseExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 862,\n                                                        \"name\": \"partition\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 787,\n                                                        \"src\": \"10399:9:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                            \"typeString\": \"uint256[] calldata\"\n                                                        }\n                                                    },\n                                                    \"id\": 864,\n                                                    \"indexExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 863,\n                                                        \"name\": \"i\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 850,\n                                                        \"src\": \"10409:1:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"IndexAccess\",\n                                                    \"src\": \"10399:12:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"VariableDeclarationStatement\",\n                                                \"src\": \"10383:28:1\"\n                                            },\n                                            {\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"arguments\": [\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"commonType\": {\n                                                                \"typeIdentifier\": \"t_bool\",\n                                                                \"typeString\": \"bool\"\n                                                            },\n                                                            \"id\": 873,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": false,\n                                                            \"lValueRequested\": false,\n                                                            \"leftExpression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"commonType\": {\n                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                    \"typeString\": \"uint256\"\n                                                                },\n                                                                \"id\": 869,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"lValueRequested\": false,\n                                                                \"leftExpression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 867,\n                                                                    \"name\": \"indexSet\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 861,\n                                                                    \"src\": \"10433:8:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                        \"typeString\": \"uint256\"\n                                                                    }\n                                                                },\n                                                                \"nodeType\": \"BinaryOperation\",\n                                                                \"operator\": \">\",\n                                                                \"rightExpression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"hexValue\": \"30\",\n                                                                    \"id\": 868,\n                                                                    \"isConstant\": false,\n                                                                    \"isLValue\": false,\n                                                                    \"isPure\": true,\n                                                                    \"kind\": \"number\",\n                                                                    \"lValueRequested\": false,\n                                                                    \"nodeType\": \"Literal\",\n                                                                    \"src\": \"10444:1:1\",\n                                                                    \"subdenomination\": null,\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                                        \"typeString\": \"int_const 0\"\n                                                                    },\n                                                                    \"value\": \"0\"\n                                                                },\n                                                                \"src\": \"10433:12:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_bool\",\n                                                                    \"typeString\": \"bool\"\n                                                                }\n                                                            },\n                                                            \"nodeType\": \"BinaryOperation\",\n                                                            \"operator\": \"&&\",\n                                                            \"rightExpression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"commonType\": {\n                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                    \"typeString\": \"uint256\"\n                                                                },\n                                                                \"id\": 872,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"lValueRequested\": false,\n                                                                \"leftExpression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 870,\n                                                                    \"name\": \"indexSet\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 861,\n                                                                    \"src\": \"10449:8:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                        \"typeString\": \"uint256\"\n                                                                    }\n                                                                },\n                                                                \"nodeType\": \"BinaryOperation\",\n                                                                \"operator\": \"<\",\n                                                                \"rightExpression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 871,\n                                                                    \"name\": \"fullIndexSet\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 815,\n                                                                    \"src\": \"10460:12:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                        \"typeString\": \"uint256\"\n                                                                    }\n                                                                },\n                                                                \"src\": \"10449:23:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_bool\",\n                                                                    \"typeString\": \"bool\"\n                                                                }\n                                                            },\n                                                            \"src\": \"10433:39:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_bool\",\n                                                                \"typeString\": \"bool\"\n                                                            }\n                                                        },\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"hexValue\": \"676f7420696e76616c696420696e64657820736574\",\n                                                            \"id\": 874,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": true,\n                                                            \"kind\": \"string\",\n                                                            \"lValueRequested\": false,\n                                                            \"nodeType\": \"Literal\",\n                                                            \"src\": \"10474:23:1\",\n                                                            \"subdenomination\": null,\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_stringliteral_6a6949259bc762cfed0fdf355e0e833a39c80f6df01cfb722c2d69f034e6a9c2\",\n                                                                \"typeString\": \"literal_string \\\"got invalid index set\\\"\"\n                                                            },\n                                                            \"value\": \"got invalid index set\"\n                                                        }\n                                                    ],\n                                                    \"expression\": {\n                                                        \"argumentTypes\": [\n                                                            {\n                                                                \"typeIdentifier\": \"t_bool\",\n                                                                \"typeString\": \"bool\"\n                                                            },\n                                                            {\n                                                                \"typeIdentifier\": \"t_stringliteral_6a6949259bc762cfed0fdf355e0e833a39c80f6df01cfb722c2d69f034e6a9c2\",\n                                                                \"typeString\": \"literal_string \\\"got invalid index set\\\"\"\n                                                            }\n                                                        ],\n                                                        \"id\": 866,\n                                                        \"name\": \"require\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [2474, 2475],\n                                                        \"referencedDeclaration\": 2475,\n                                                        \"src\": \"10425:7:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                            \"typeString\": \"function (bool,string memory) pure\"\n                                                        }\n                                                    },\n                                                    \"id\": 875,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"kind\": \"functionCall\",\n                                                    \"lValueRequested\": false,\n                                                    \"names\": [],\n                                                    \"nodeType\": \"FunctionCall\",\n                                                    \"src\": \"10425:73:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_tuple$__$\",\n                                                        \"typeString\": \"tuple()\"\n                                                    }\n                                                },\n                                                \"id\": 876,\n                                                \"nodeType\": \"ExpressionStatement\",\n                                                \"src\": \"10425:73:1\"\n                                            },\n                                            {\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"arguments\": [\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"commonType\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            },\n                                                            \"id\": 883,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": false,\n                                                            \"lValueRequested\": false,\n                                                            \"leftExpression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"components\": [\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"commonType\": {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        },\n                                                                        \"id\": 880,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": false,\n                                                                        \"lValueRequested\": false,\n                                                                        \"leftExpression\": {\n                                                                            \"argumentTypes\": null,\n                                                                            \"id\": 878,\n                                                                            \"name\": \"indexSet\",\n                                                                            \"nodeType\": \"Identifier\",\n                                                                            \"overloadedDeclarations\": [],\n                                                                            \"referencedDeclaration\": 861,\n                                                                            \"src\": \"10521:8:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                \"typeString\": \"uint256\"\n                                                                            }\n                                                                        },\n                                                                        \"nodeType\": \"BinaryOperation\",\n                                                                        \"operator\": \"&\",\n                                                                        \"rightExpression\": {\n                                                                            \"argumentTypes\": null,\n                                                                            \"id\": 879,\n                                                                            \"name\": \"freeIndexSet\",\n                                                                            \"nodeType\": \"Identifier\",\n                                                                            \"overloadedDeclarations\": [],\n                                                                            \"referencedDeclaration\": 824,\n                                                                            \"src\": \"10532:12:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                \"typeString\": \"uint256\"\n                                                                            }\n                                                                        },\n                                                                        \"src\": \"10521:23:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    }\n                                                                ],\n                                                                \"id\": 881,\n                                                                \"isConstant\": false,\n                                                                \"isInlineArray\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"lValueRequested\": false,\n                                                                \"nodeType\": \"TupleExpression\",\n                                                                \"src\": \"10520:25:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                    \"typeString\": \"uint256\"\n                                                                }\n                                                            },\n                                                            \"nodeType\": \"BinaryOperation\",\n                                                            \"operator\": \"==\",\n                                                            \"rightExpression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"id\": 882,\n                                                                \"name\": \"indexSet\",\n                                                                \"nodeType\": \"Identifier\",\n                                                                \"overloadedDeclarations\": [],\n                                                                \"referencedDeclaration\": 861,\n                                                                \"src\": \"10549:8:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                    \"typeString\": \"uint256\"\n                                                                }\n                                                            },\n                                                            \"src\": \"10520:37:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_bool\",\n                                                                \"typeString\": \"bool\"\n                                                            }\n                                                        },\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"hexValue\": \"706172746974696f6e206e6f74206469736a6f696e74\",\n                                                            \"id\": 884,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": true,\n                                                            \"kind\": \"string\",\n                                                            \"lValueRequested\": false,\n                                                            \"nodeType\": \"Literal\",\n                                                            \"src\": \"10559:24:1\",\n                                                            \"subdenomination\": null,\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_stringliteral_a336fd2d125b487729e17b65dd490bafa0eb0de3aa7aaeba65732e819267b75b\",\n                                                                \"typeString\": \"literal_string \\\"partition not disjoint\\\"\"\n                                                            },\n                                                            \"value\": \"partition not disjoint\"\n                                                        }\n                                                    ],\n                                                    \"expression\": {\n                                                        \"argumentTypes\": [\n                                                            {\n                                                                \"typeIdentifier\": \"t_bool\",\n                                                                \"typeString\": \"bool\"\n                                                            },\n                                                            {\n                                                                \"typeIdentifier\": \"t_stringliteral_a336fd2d125b487729e17b65dd490bafa0eb0de3aa7aaeba65732e819267b75b\",\n                                                                \"typeString\": \"literal_string \\\"partition not disjoint\\\"\"\n                                                            }\n                                                        ],\n                                                        \"id\": 877,\n                                                        \"name\": \"require\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [2474, 2475],\n                                                        \"referencedDeclaration\": 2475,\n                                                        \"src\": \"10512:7:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                            \"typeString\": \"function (bool,string memory) pure\"\n                                                        }\n                                                    },\n                                                    \"id\": 885,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"kind\": \"functionCall\",\n                                                    \"lValueRequested\": false,\n                                                    \"names\": [],\n                                                    \"nodeType\": \"FunctionCall\",\n                                                    \"src\": \"10512:72:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_tuple$__$\",\n                                                        \"typeString\": \"tuple()\"\n                                                    }\n                                                },\n                                                \"id\": 886,\n                                                \"nodeType\": \"ExpressionStatement\",\n                                                \"src\": \"10512:72:1\"\n                                            },\n                                            {\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 889,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"leftHandSide\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 887,\n                                                        \"name\": \"freeIndexSet\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 824,\n                                                        \"src\": \"10598:12:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"nodeType\": \"Assignment\",\n                                                    \"operator\": \"^=\",\n                                                    \"rightHandSide\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 888,\n                                                        \"name\": \"indexSet\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 861,\n                                                        \"src\": \"10614:8:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"src\": \"10598:24:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"id\": 890,\n                                                \"nodeType\": \"ExpressionStatement\",\n                                                \"src\": \"10598:24:1\"\n                                            },\n                                            {\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 904,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"leftHandSide\": {\n                                                        \"argumentTypes\": null,\n                                                        \"baseExpression\": {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 891,\n                                                            \"name\": \"positionIds\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 830,\n                                                            \"src\": \"10636:11:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                                                \"typeString\": \"uint256[] memory\"\n                                                            }\n                                                        },\n                                                        \"id\": 893,\n                                                        \"indexExpression\": {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 892,\n                                                            \"name\": \"i\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 850,\n                                                            \"src\": \"10648:1:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        },\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": true,\n                                                        \"isPure\": false,\n                                                        \"lValueRequested\": true,\n                                                        \"nodeType\": \"IndexAccess\",\n                                                        \"src\": \"10636:14:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"nodeType\": \"Assignment\",\n                                                    \"operator\": \"=\",\n                                                    \"rightHandSide\": {\n                                                        \"argumentTypes\": null,\n                                                        \"arguments\": [\n                                                            {\n                                                                \"argumentTypes\": null,\n                                                                \"id\": 896,\n                                                                \"name\": \"collateralToken\",\n                                                                \"nodeType\": \"Identifier\",\n                                                                \"overloadedDeclarations\": [],\n                                                                \"referencedDeclaration\": 780,\n                                                                \"src\": \"10677:15:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                    \"typeString\": \"contract IERC20\"\n                                                                }\n                                                            },\n                                                            {\n                                                                \"argumentTypes\": null,\n                                                                \"arguments\": [\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"id\": 899,\n                                                                        \"name\": \"parentCollectionId\",\n                                                                        \"nodeType\": \"Identifier\",\n                                                                        \"overloadedDeclarations\": [],\n                                                                        \"referencedDeclaration\": 782,\n                                                                        \"src\": \"10720:18:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_bytes32\",\n                                                                            \"typeString\": \"bytes32\"\n                                                                        }\n                                                                    },\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"id\": 900,\n                                                                        \"name\": \"conditionId\",\n                                                                        \"nodeType\": \"Identifier\",\n                                                                        \"overloadedDeclarations\": [],\n                                                                        \"referencedDeclaration\": 784,\n                                                                        \"src\": \"10740:11:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_bytes32\",\n                                                                            \"typeString\": \"bytes32\"\n                                                                        }\n                                                                    },\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"id\": 901,\n                                                                        \"name\": \"indexSet\",\n                                                                        \"nodeType\": \"Identifier\",\n                                                                        \"overloadedDeclarations\": [],\n                                                                        \"referencedDeclaration\": 861,\n                                                                        \"src\": \"10753:8:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    }\n                                                                ],\n                                                                \"expression\": {\n                                                                    \"argumentTypes\": [\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_bytes32\",\n                                                                            \"typeString\": \"bytes32\"\n                                                                        },\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_bytes32\",\n                                                                            \"typeString\": \"bytes32\"\n                                                                        },\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    ],\n                                                                    \"expression\": {\n                                                                        \"argumentTypes\": null,\n                                                                        \"id\": 897,\n                                                                        \"name\": \"CTHelpers\",\n                                                                        \"nodeType\": \"Identifier\",\n                                                                        \"overloadedDeclarations\": [],\n                                                                        \"referencedDeclaration\": 298,\n                                                                        \"src\": \"10694:9:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                                            \"typeString\": \"type(library CTHelpers)\"\n                                                                        }\n                                                                    },\n                                                                    \"id\": 898,\n                                                                    \"isConstant\": false,\n                                                                    \"isLValue\": false,\n                                                                    \"isPure\": false,\n                                                                    \"lValueRequested\": false,\n                                                                    \"memberName\": \"getCollectionId\",\n                                                                    \"nodeType\": \"MemberAccess\",\n                                                                    \"referencedDeclaration\": 277,\n                                                                    \"src\": \"10694:25:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$\",\n                                                                        \"typeString\": \"function (bytes32,bytes32,uint256) view returns (bytes32)\"\n                                                                    }\n                                                                },\n                                                                \"id\": 902,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"kind\": \"functionCall\",\n                                                                \"lValueRequested\": false,\n                                                                \"names\": [],\n                                                                \"nodeType\": \"FunctionCall\",\n                                                                \"src\": \"10694:68:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                                    \"typeString\": \"bytes32\"\n                                                                }\n                                                            }\n                                                        ],\n                                                        \"expression\": {\n                                                            \"argumentTypes\": [\n                                                                {\n                                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                    \"typeString\": \"contract IERC20\"\n                                                                },\n                                                                {\n                                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                                    \"typeString\": \"bytes32\"\n                                                                }\n                                                            ],\n                                                            \"expression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"id\": 894,\n                                                                \"name\": \"CTHelpers\",\n                                                                \"nodeType\": \"Identifier\",\n                                                                \"overloadedDeclarations\": [],\n                                                                \"referencedDeclaration\": 298,\n                                                                \"src\": \"10653:9:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                                    \"typeString\": \"type(library CTHelpers)\"\n                                                                }\n                                                            },\n                                                            \"id\": 895,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": false,\n                                                            \"lValueRequested\": false,\n                                                            \"memberName\": \"getPositionId\",\n                                                            \"nodeType\": \"MemberAccess\",\n                                                            \"referencedDeclaration\": 297,\n                                                            \"src\": \"10653:23:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_function_internal_pure$_t_contract$_IERC20_$2437_$_t_bytes32_$returns$_t_uint256_$\",\n                                                                \"typeString\": \"function (contract IERC20,bytes32) pure returns (uint256)\"\n                                                            }\n                                                        },\n                                                        \"id\": 903,\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": false,\n                                                        \"isPure\": false,\n                                                        \"kind\": \"functionCall\",\n                                                        \"lValueRequested\": false,\n                                                        \"names\": [],\n                                                        \"nodeType\": \"FunctionCall\",\n                                                        \"src\": \"10653:110:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"src\": \"10636:127:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"id\": 905,\n                                                \"nodeType\": \"ExpressionStatement\",\n                                                \"src\": \"10636:127:1\"\n                                            },\n                                            {\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 910,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"leftHandSide\": {\n                                                        \"argumentTypes\": null,\n                                                        \"baseExpression\": {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 906,\n                                                            \"name\": \"amounts\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 841,\n                                                            \"src\": \"10777:7:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                                                \"typeString\": \"uint256[] memory\"\n                                                            }\n                                                        },\n                                                        \"id\": 908,\n                                                        \"indexExpression\": {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 907,\n                                                            \"name\": \"i\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 850,\n                                                            \"src\": \"10785:1:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        },\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": true,\n                                                        \"isPure\": false,\n                                                        \"lValueRequested\": true,\n                                                        \"nodeType\": \"IndexAccess\",\n                                                        \"src\": \"10777:10:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"nodeType\": \"Assignment\",\n                                                    \"operator\": \"=\",\n                                                    \"rightHandSide\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 909,\n                                                        \"name\": \"amount\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 789,\n                                                        \"src\": \"10790:6:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"src\": \"10777:19:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"id\": 911,\n                                                \"nodeType\": \"ExpressionStatement\",\n                                                \"src\": \"10777:19:1\"\n                                            }\n                                        ]\n                                    },\n                                    \"condition\": {\n                                        \"argumentTypes\": null,\n                                        \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        },\n                                        \"id\": 856,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"leftExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"id\": 853,\n                                            \"name\": \"i\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 850,\n                                            \"src\": \"10342:1:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"nodeType\": \"BinaryOperation\",\n                                        \"operator\": \"<\",\n                                        \"rightExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"expression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 854,\n                                                \"name\": \"partition\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 787,\n                                                \"src\": \"10346:9:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                    \"typeString\": \"uint256[] calldata\"\n                                                }\n                                            },\n                                            \"id\": 855,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"memberName\": \"length\",\n                                            \"nodeType\": \"MemberAccess\",\n                                            \"referencedDeclaration\": null,\n                                            \"src\": \"10346:16:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"src\": \"10342:20:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bool\",\n                                            \"typeString\": \"bool\"\n                                        }\n                                    },\n                                    \"id\": 913,\n                                    \"initializationExpression\": {\n                                        \"assignments\": [850],\n                                        \"declarations\": [\n                                            {\n                                                \"constant\": false,\n                                                \"id\": 850,\n                                                \"name\": \"i\",\n                                                \"nodeType\": \"VariableDeclaration\",\n                                                \"scope\": 913,\n                                                \"src\": \"10330:6:1\",\n                                                \"stateVariable\": false,\n                                                \"storageLocation\": \"default\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                \"typeName\": {\n                                                    \"id\": 849,\n                                                    \"name\": \"uint\",\n                                                    \"nodeType\": \"ElementaryTypeName\",\n                                                    \"src\": \"10330:4:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"value\": null,\n                                                \"visibility\": \"internal\"\n                                            }\n                                        ],\n                                        \"id\": 852,\n                                        \"initialValue\": {\n                                            \"argumentTypes\": null,\n                                            \"hexValue\": \"30\",\n                                            \"id\": 851,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": true,\n                                            \"kind\": \"number\",\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"Literal\",\n                                            \"src\": \"10339:1:1\",\n                                            \"subdenomination\": null,\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                \"typeString\": \"int_const 0\"\n                                            },\n                                            \"value\": \"0\"\n                                        },\n                                        \"nodeType\": \"VariableDeclarationStatement\",\n                                        \"src\": \"10330:10:1\"\n                                    },\n                                    \"loopExpression\": {\n                                        \"expression\": {\n                                            \"argumentTypes\": null,\n                                            \"id\": 858,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"UnaryOperation\",\n                                            \"operator\": \"++\",\n                                            \"prefix\": false,\n                                            \"src\": \"10364:3:1\",\n                                            \"subExpression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 857,\n                                                \"name\": \"i\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 850,\n                                                \"src\": \"10364:1:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            },\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"id\": 859,\n                                        \"nodeType\": \"ExpressionStatement\",\n                                        \"src\": \"10364:3:1\"\n                                    },\n                                    \"nodeType\": \"ForStatement\",\n                                    \"src\": \"10325:482:1\"\n                                },\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 915,\n                                                    \"name\": \"msg\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 2471,\n                                                    \"src\": \"10840:3:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_magic_message\",\n                                                        \"typeString\": \"msg\"\n                                                    }\n                                                },\n                                                \"id\": 916,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"memberName\": \"sender\",\n                                                \"nodeType\": \"MemberAccess\",\n                                                \"referencedDeclaration\": null,\n                                                \"src\": \"10840:10:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                    \"typeString\": \"address payable\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 917,\n                                                \"name\": \"positionIds\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 830,\n                                                \"src\": \"10864:11:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                                    \"typeString\": \"uint256[] memory\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 918,\n                                                \"name\": \"amounts\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 841,\n                                                \"src\": \"10889:7:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                                    \"typeString\": \"uint256[] memory\"\n                                                }\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                    \"typeString\": \"address payable\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                                    \"typeString\": \"uint256[] memory\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                                    \"typeString\": \"uint256[] memory\"\n                                                }\n                                            ],\n                                            \"id\": 914,\n                                            \"name\": \"_batchBurn\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 1939,\n                                            \"src\": \"10816:10:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$\",\n                                                \"typeString\": \"function (address,uint256[] memory,uint256[] memory)\"\n                                            }\n                                        },\n                                        \"id\": 919,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"10816:90:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 920,\n                                    \"nodeType\": \"ExpressionStatement\",\n                                    \"src\": \"10816:90:1\"\n                                },\n                                {\n                                    \"condition\": {\n                                        \"argumentTypes\": null,\n                                        \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        },\n                                        \"id\": 923,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"leftExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"id\": 921,\n                                            \"name\": \"freeIndexSet\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 824,\n                                            \"src\": \"10921:12:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"nodeType\": \"BinaryOperation\",\n                                        \"operator\": \"==\",\n                                        \"rightExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"hexValue\": \"30\",\n                                            \"id\": 922,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": true,\n                                            \"kind\": \"number\",\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"Literal\",\n                                            \"src\": \"10937:1:1\",\n                                            \"subdenomination\": null,\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                \"typeString\": \"int_const 0\"\n                                            },\n                                            \"value\": \"0\"\n                                        },\n                                        \"src\": \"10921:17:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bool\",\n                                            \"typeString\": \"bool\"\n                                        }\n                                    },\n                                    \"falseBody\": {\n                                        \"id\": 974,\n                                        \"nodeType\": \"Block\",\n                                        \"src\": \"11358:283:1\",\n                                        \"statements\": [\n                                            {\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"arguments\": [\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"expression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"id\": 956,\n                                                                \"name\": \"msg\",\n                                                                \"nodeType\": \"Identifier\",\n                                                                \"overloadedDeclarations\": [],\n                                                                \"referencedDeclaration\": 2471,\n                                                                \"src\": \"11395:3:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_magic_message\",\n                                                                    \"typeString\": \"msg\"\n                                                                }\n                                                            },\n                                                            \"id\": 957,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": false,\n                                                            \"lValueRequested\": false,\n                                                            \"memberName\": \"sender\",\n                                                            \"nodeType\": \"MemberAccess\",\n                                                            \"referencedDeclaration\": null,\n                                                            \"src\": \"11395:10:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_address_payable\",\n                                                                \"typeString\": \"address payable\"\n                                                            }\n                                                        },\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"arguments\": [\n                                                                {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 960,\n                                                                    \"name\": \"collateralToken\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 780,\n                                                                    \"src\": \"11447:15:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                        \"typeString\": \"contract IERC20\"\n                                                                    }\n                                                                },\n                                                                {\n                                                                    \"argumentTypes\": null,\n                                                                    \"arguments\": [\n                                                                        {\n                                                                            \"argumentTypes\": null,\n                                                                            \"id\": 963,\n                                                                            \"name\": \"parentCollectionId\",\n                                                                            \"nodeType\": \"Identifier\",\n                                                                            \"overloadedDeclarations\": [],\n                                                                            \"referencedDeclaration\": 782,\n                                                                            \"src\": \"11510:18:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_bytes32\",\n                                                                                \"typeString\": \"bytes32\"\n                                                                            }\n                                                                        },\n                                                                        {\n                                                                            \"argumentTypes\": null,\n                                                                            \"id\": 964,\n                                                                            \"name\": \"conditionId\",\n                                                                            \"nodeType\": \"Identifier\",\n                                                                            \"overloadedDeclarations\": [],\n                                                                            \"referencedDeclaration\": 784,\n                                                                            \"src\": \"11530:11:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_bytes32\",\n                                                                                \"typeString\": \"bytes32\"\n                                                                            }\n                                                                        },\n                                                                        {\n                                                                            \"argumentTypes\": null,\n                                                                            \"commonType\": {\n                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                \"typeString\": \"uint256\"\n                                                                            },\n                                                                            \"id\": 967,\n                                                                            \"isConstant\": false,\n                                                                            \"isLValue\": false,\n                                                                            \"isPure\": false,\n                                                                            \"lValueRequested\": false,\n                                                                            \"leftExpression\": {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 965,\n                                                                                \"name\": \"fullIndexSet\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 815,\n                                                                                \"src\": \"11543:12:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                                    \"typeString\": \"uint256\"\n                                                                                }\n                                                                            },\n                                                                            \"nodeType\": \"BinaryOperation\",\n                                                                            \"operator\": \"^\",\n                                                                            \"rightExpression\": {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 966,\n                                                                                \"name\": \"freeIndexSet\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 824,\n                                                                                \"src\": \"11558:12:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                                    \"typeString\": \"uint256\"\n                                                                                }\n                                                                            },\n                                                                            \"src\": \"11543:27:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                \"typeString\": \"uint256\"\n                                                                            }\n                                                                        }\n                                                                    ],\n                                                                    \"expression\": {\n                                                                        \"argumentTypes\": [\n                                                                            {\n                                                                                \"typeIdentifier\": \"t_bytes32\",\n                                                                                \"typeString\": \"bytes32\"\n                                                                            },\n                                                                            {\n                                                                                \"typeIdentifier\": \"t_bytes32\",\n                                                                                \"typeString\": \"bytes32\"\n                                                                            },\n                                                                            {\n                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                \"typeString\": \"uint256\"\n                                                                            }\n                                                                        ],\n                                                                        \"expression\": {\n                                                                            \"argumentTypes\": null,\n                                                                            \"id\": 961,\n                                                                            \"name\": \"CTHelpers\",\n                                                                            \"nodeType\": \"Identifier\",\n                                                                            \"overloadedDeclarations\": [],\n                                                                            \"referencedDeclaration\": 298,\n                                                                            \"src\": \"11484:9:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                                                \"typeString\": \"type(library CTHelpers)\"\n                                                                            }\n                                                                        },\n                                                                        \"id\": 962,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": false,\n                                                                        \"lValueRequested\": false,\n                                                                        \"memberName\": \"getCollectionId\",\n                                                                        \"nodeType\": \"MemberAccess\",\n                                                                        \"referencedDeclaration\": 277,\n                                                                        \"src\": \"11484:25:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$\",\n                                                                            \"typeString\": \"function (bytes32,bytes32,uint256) view returns (bytes32)\"\n                                                                        }\n                                                                    },\n                                                                    \"id\": 968,\n                                                                    \"isConstant\": false,\n                                                                    \"isLValue\": false,\n                                                                    \"isPure\": false,\n                                                                    \"kind\": \"functionCall\",\n                                                                    \"lValueRequested\": false,\n                                                                    \"names\": [],\n                                                                    \"nodeType\": \"FunctionCall\",\n                                                                    \"src\": \"11484:87:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_bytes32\",\n                                                                        \"typeString\": \"bytes32\"\n                                                                    }\n                                                                }\n                                                            ],\n                                                            \"expression\": {\n                                                                \"argumentTypes\": [\n                                                                    {\n                                                                        \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                        \"typeString\": \"contract IERC20\"\n                                                                    },\n                                                                    {\n                                                                        \"typeIdentifier\": \"t_bytes32\",\n                                                                        \"typeString\": \"bytes32\"\n                                                                    }\n                                                                ],\n                                                                \"expression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 958,\n                                                                    \"name\": \"CTHelpers\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 298,\n                                                                    \"src\": \"11423:9:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                                        \"typeString\": \"type(library CTHelpers)\"\n                                                                    }\n                                                                },\n                                                                \"id\": 959,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"lValueRequested\": false,\n                                                                \"memberName\": \"getPositionId\",\n                                                                \"nodeType\": \"MemberAccess\",\n                                                                \"referencedDeclaration\": 297,\n                                                                \"src\": \"11423:23:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_function_internal_pure$_t_contract$_IERC20_$2437_$_t_bytes32_$returns$_t_uint256_$\",\n                                                                    \"typeString\": \"function (contract IERC20,bytes32) pure returns (uint256)\"\n                                                                }\n                                                            },\n                                                            \"id\": 969,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": false,\n                                                            \"kind\": \"functionCall\",\n                                                            \"lValueRequested\": false,\n                                                            \"names\": [],\n                                                            \"nodeType\": \"FunctionCall\",\n                                                            \"src\": \"11423:149:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        },\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 970,\n                                                            \"name\": \"amount\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 789,\n                                                            \"src\": \"11590:6:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        },\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"hexValue\": \"\",\n                                                            \"id\": 971,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": true,\n                                                            \"kind\": \"string\",\n                                                            \"lValueRequested\": false,\n                                                            \"nodeType\": \"Literal\",\n                                                            \"src\": \"11614:2:1\",\n                                                            \"subdenomination\": null,\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470\",\n                                                                \"typeString\": \"literal_string \\\"\\\"\"\n                                                            },\n                                                            \"value\": \"\"\n                                                        }\n                                                    ],\n                                                    \"expression\": {\n                                                        \"argumentTypes\": [\n                                                            {\n                                                                \"typeIdentifier\": \"t_address_payable\",\n                                                                \"typeString\": \"address payable\"\n                                                            },\n                                                            {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            },\n                                                            {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            },\n                                                            {\n                                                                \"typeIdentifier\": \"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470\",\n                                                                \"typeString\": \"literal_string \\\"\\\"\"\n                                                            }\n                                                        ],\n                                                        \"id\": 955,\n                                                        \"name\": \"_mint\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 1748,\n                                                        \"src\": \"11372:5:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$\",\n                                                            \"typeString\": \"function (address,uint256,uint256,bytes memory)\"\n                                                        }\n                                                    },\n                                                    \"id\": 972,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"kind\": \"functionCall\",\n                                                    \"lValueRequested\": false,\n                                                    \"names\": [],\n                                                    \"nodeType\": \"FunctionCall\",\n                                                    \"src\": \"11372:258:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_tuple$__$\",\n                                                        \"typeString\": \"tuple()\"\n                                                    }\n                                                },\n                                                \"id\": 973,\n                                                \"nodeType\": \"ExpressionStatement\",\n                                                \"src\": \"11372:258:1\"\n                                            }\n                                        ]\n                                    },\n                                    \"id\": 975,\n                                    \"nodeType\": \"IfStatement\",\n                                    \"src\": \"10917:724:1\",\n                                    \"trueBody\": {\n                                        \"id\": 954,\n                                        \"nodeType\": \"Block\",\n                                        \"src\": \"10940:412:1\",\n                                        \"statements\": [\n                                            {\n                                                \"condition\": {\n                                                    \"argumentTypes\": null,\n                                                    \"commonType\": {\n                                                        \"typeIdentifier\": \"t_bytes32\",\n                                                        \"typeString\": \"bytes32\"\n                                                    },\n                                                    \"id\": 928,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"leftExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 924,\n                                                        \"name\": \"parentCollectionId\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 782,\n                                                        \"src\": \"10958:18:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_bytes32\",\n                                                            \"typeString\": \"bytes32\"\n                                                        }\n                                                    },\n                                                    \"nodeType\": \"BinaryOperation\",\n                                                    \"operator\": \"==\",\n                                                    \"rightExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"arguments\": [\n                                                            {\n                                                                \"argumentTypes\": null,\n                                                                \"hexValue\": \"30\",\n                                                                \"id\": 926,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": true,\n                                                                \"kind\": \"number\",\n                                                                \"lValueRequested\": false,\n                                                                \"nodeType\": \"Literal\",\n                                                                \"src\": \"10988:1:1\",\n                                                                \"subdenomination\": null,\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                                    \"typeString\": \"int_const 0\"\n                                                                },\n                                                                \"value\": \"0\"\n                                                            }\n                                                        ],\n                                                        \"expression\": {\n                                                            \"argumentTypes\": [\n                                                                {\n                                                                    \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                                    \"typeString\": \"int_const 0\"\n                                                                }\n                                                            ],\n                                                            \"id\": 925,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": true,\n                                                            \"lValueRequested\": false,\n                                                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                                                            \"src\": \"10980:7:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_type$_t_bytes32_$\",\n                                                                \"typeString\": \"type(bytes32)\"\n                                                            },\n                                                            \"typeName\": \"bytes32\"\n                                                        },\n                                                        \"id\": 927,\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": false,\n                                                        \"isPure\": true,\n                                                        \"kind\": \"typeConversion\",\n                                                        \"lValueRequested\": false,\n                                                        \"names\": [],\n                                                        \"nodeType\": \"FunctionCall\",\n                                                        \"src\": \"10980:10:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_bytes32\",\n                                                            \"typeString\": \"bytes32\"\n                                                        }\n                                                    },\n                                                    \"src\": \"10958:32:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_bool\",\n                                                        \"typeString\": \"bool\"\n                                                    }\n                                                },\n                                                \"falseBody\": {\n                                                    \"id\": 952,\n                                                    \"nodeType\": \"Block\",\n                                                    \"src\": \"11120:222:1\",\n                                                    \"statements\": [\n                                                        {\n                                                            \"expression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"arguments\": [\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"expression\": {\n                                                                            \"argumentTypes\": null,\n                                                                            \"id\": 941,\n                                                                            \"name\": \"msg\",\n                                                                            \"nodeType\": \"Identifier\",\n                                                                            \"overloadedDeclarations\": [],\n                                                                            \"referencedDeclaration\": 2471,\n                                                                            \"src\": \"11165:3:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_magic_message\",\n                                                                                \"typeString\": \"msg\"\n                                                                            }\n                                                                        },\n                                                                        \"id\": 942,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": false,\n                                                                        \"lValueRequested\": false,\n                                                                        \"memberName\": \"sender\",\n                                                                        \"nodeType\": \"MemberAccess\",\n                                                                        \"referencedDeclaration\": null,\n                                                                        \"src\": \"11165:10:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_address_payable\",\n                                                                            \"typeString\": \"address payable\"\n                                                                        }\n                                                                    },\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"arguments\": [\n                                                                            {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 945,\n                                                                                \"name\": \"collateralToken\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 780,\n                                                                                \"src\": \"11221:15:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                                    \"typeString\": \"contract IERC20\"\n                                                                                }\n                                                                            },\n                                                                            {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 946,\n                                                                                \"name\": \"parentCollectionId\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 782,\n                                                                                \"src\": \"11238:18:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                                                    \"typeString\": \"bytes32\"\n                                                                                }\n                                                                            }\n                                                                        ],\n                                                                        \"expression\": {\n                                                                            \"argumentTypes\": [\n                                                                                {\n                                                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                                    \"typeString\": \"contract IERC20\"\n                                                                                },\n                                                                                {\n                                                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                                                    \"typeString\": \"bytes32\"\n                                                                                }\n                                                                            ],\n                                                                            \"expression\": {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 943,\n                                                                                \"name\": \"CTHelpers\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 298,\n                                                                                \"src\": \"11197:9:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                                                    \"typeString\": \"type(library CTHelpers)\"\n                                                                                }\n                                                                            },\n                                                                            \"id\": 944,\n                                                                            \"isConstant\": false,\n                                                                            \"isLValue\": false,\n                                                                            \"isPure\": false,\n                                                                            \"lValueRequested\": false,\n                                                                            \"memberName\": \"getPositionId\",\n                                                                            \"nodeType\": \"MemberAccess\",\n                                                                            \"referencedDeclaration\": 297,\n                                                                            \"src\": \"11197:23:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_function_internal_pure$_t_contract$_IERC20_$2437_$_t_bytes32_$returns$_t_uint256_$\",\n                                                                                \"typeString\": \"function (contract IERC20,bytes32) pure returns (uint256)\"\n                                                                            }\n                                                                        },\n                                                                        \"id\": 947,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": false,\n                                                                        \"kind\": \"functionCall\",\n                                                                        \"lValueRequested\": false,\n                                                                        \"names\": [],\n                                                                        \"nodeType\": \"FunctionCall\",\n                                                                        \"src\": \"11197:60:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    },\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"id\": 948,\n                                                                        \"name\": \"amount\",\n                                                                        \"nodeType\": \"Identifier\",\n                                                                        \"overloadedDeclarations\": [],\n                                                                        \"referencedDeclaration\": 789,\n                                                                        \"src\": \"11279:6:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    },\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"hexValue\": \"\",\n                                                                        \"id\": 949,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": true,\n                                                                        \"kind\": \"string\",\n                                                                        \"lValueRequested\": false,\n                                                                        \"nodeType\": \"Literal\",\n                                                                        \"src\": \"11307:2:1\",\n                                                                        \"subdenomination\": null,\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470\",\n                                                                            \"typeString\": \"literal_string \\\"\\\"\"\n                                                                        },\n                                                                        \"value\": \"\"\n                                                                    }\n                                                                ],\n                                                                \"expression\": {\n                                                                    \"argumentTypes\": [\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_address_payable\",\n                                                                            \"typeString\": \"address payable\"\n                                                                        },\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        },\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        },\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470\",\n                                                                            \"typeString\": \"literal_string \\\"\\\"\"\n                                                                        }\n                                                                    ],\n                                                                    \"id\": 940,\n                                                                    \"name\": \"_mint\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 1748,\n                                                                    \"src\": \"11138:5:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$\",\n                                                                        \"typeString\": \"function (address,uint256,uint256,bytes memory)\"\n                                                                    }\n                                                                },\n                                                                \"id\": 950,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"kind\": \"functionCall\",\n                                                                \"lValueRequested\": false,\n                                                                \"names\": [],\n                                                                \"nodeType\": \"FunctionCall\",\n                                                                \"src\": \"11138:189:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_tuple$__$\",\n                                                                    \"typeString\": \"tuple()\"\n                                                                }\n                                                            },\n                                                            \"id\": 951,\n                                                            \"nodeType\": \"ExpressionStatement\",\n                                                            \"src\": \"11138:189:1\"\n                                                        }\n                                                    ]\n                                                },\n                                                \"id\": 953,\n                                                \"nodeType\": \"IfStatement\",\n                                                \"src\": \"10954:388:1\",\n                                                \"trueBody\": {\n                                                    \"id\": 939,\n                                                    \"nodeType\": \"Block\",\n                                                    \"src\": \"10992:122:1\",\n                                                    \"statements\": [\n                                                        {\n                                                            \"expression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"arguments\": [\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"arguments\": [\n                                                                            {\n                                                                                \"argumentTypes\": null,\n                                                                                \"expression\": {\n                                                                                    \"argumentTypes\": null,\n                                                                                    \"id\": 932,\n                                                                                    \"name\": \"msg\",\n                                                                                    \"nodeType\": \"Identifier\",\n                                                                                    \"overloadedDeclarations\": [],\n                                                                                    \"referencedDeclaration\": 2471,\n                                                                                    \"src\": \"11043:3:1\",\n                                                                                    \"typeDescriptions\": {\n                                                                                        \"typeIdentifier\": \"t_magic_message\",\n                                                                                        \"typeString\": \"msg\"\n                                                                                    }\n                                                                                },\n                                                                                \"id\": 933,\n                                                                                \"isConstant\": false,\n                                                                                \"isLValue\": false,\n                                                                                \"isPure\": false,\n                                                                                \"lValueRequested\": false,\n                                                                                \"memberName\": \"sender\",\n                                                                                \"nodeType\": \"MemberAccess\",\n                                                                                \"referencedDeclaration\": null,\n                                                                                \"src\": \"11043:10:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                                                    \"typeString\": \"address payable\"\n                                                                                }\n                                                                            },\n                                                                            {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 934,\n                                                                                \"name\": \"amount\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 789,\n                                                                                \"src\": \"11055:6:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                                    \"typeString\": \"uint256\"\n                                                                                }\n                                                                            }\n                                                                        ],\n                                                                        \"expression\": {\n                                                                            \"argumentTypes\": [\n                                                                                {\n                                                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                                                    \"typeString\": \"address payable\"\n                                                                                },\n                                                                                {\n                                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                                    \"typeString\": \"uint256\"\n                                                                                }\n                                                                            ],\n                                                                            \"expression\": {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 930,\n                                                                                \"name\": \"collateralToken\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 780,\n                                                                                \"src\": \"11018:15:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                                    \"typeString\": \"contract IERC20\"\n                                                                                }\n                                                                            },\n                                                                            \"id\": 931,\n                                                                            \"isConstant\": false,\n                                                                            \"isLValue\": false,\n                                                                            \"isPure\": false,\n                                                                            \"lValueRequested\": false,\n                                                                            \"memberName\": \"transfer\",\n                                                                            \"nodeType\": \"MemberAccess\",\n                                                                            \"referencedDeclaration\": 2391,\n                                                                            \"src\": \"11018:24:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$\",\n                                                                                \"typeString\": \"function (address,uint256) external returns (bool)\"\n                                                                            }\n                                                                        },\n                                                                        \"id\": 935,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": false,\n                                                                        \"kind\": \"functionCall\",\n                                                                        \"lValueRequested\": false,\n                                                                        \"names\": [],\n                                                                        \"nodeType\": \"FunctionCall\",\n                                                                        \"src\": \"11018:44:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_bool\",\n                                                                            \"typeString\": \"bool\"\n                                                                        }\n                                                                    },\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"hexValue\": \"636f756c64206e6f742073656e6420636f6c6c61746572616c20746f6b656e73\",\n                                                                        \"id\": 936,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": true,\n                                                                        \"kind\": \"string\",\n                                                                        \"lValueRequested\": false,\n                                                                        \"nodeType\": \"Literal\",\n                                                                        \"src\": \"11064:34:1\",\n                                                                        \"subdenomination\": null,\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_stringliteral_dcd28c60b7fa293f6dafe313fdc41bf17dfba1d84f95b6ea253655688f13ff97\",\n                                                                            \"typeString\": \"literal_string \\\"could not send collateral tokens\\\"\"\n                                                                        },\n                                                                        \"value\": \"could not send collateral tokens\"\n                                                                    }\n                                                                ],\n                                                                \"expression\": {\n                                                                    \"argumentTypes\": [\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_bool\",\n                                                                            \"typeString\": \"bool\"\n                                                                        },\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_stringliteral_dcd28c60b7fa293f6dafe313fdc41bf17dfba1d84f95b6ea253655688f13ff97\",\n                                                                            \"typeString\": \"literal_string \\\"could not send collateral tokens\\\"\"\n                                                                        }\n                                                                    ],\n                                                                    \"id\": 929,\n                                                                    \"name\": \"require\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [2474, 2475],\n                                                                    \"referencedDeclaration\": 2475,\n                                                                    \"src\": \"11010:7:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                                        \"typeString\": \"function (bool,string memory) pure\"\n                                                                    }\n                                                                },\n                                                                \"id\": 937,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"kind\": \"functionCall\",\n                                                                \"lValueRequested\": false,\n                                                                \"names\": [],\n                                                                \"nodeType\": \"FunctionCall\",\n                                                                \"src\": \"11010:89:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_tuple$__$\",\n                                                                    \"typeString\": \"tuple()\"\n                                                                }\n                                                            },\n                                                            \"id\": 938,\n                                                            \"nodeType\": \"ExpressionStatement\",\n                                                            \"src\": \"11010:89:1\"\n                                                        }\n                                                    ]\n                                                }\n                                            }\n                                        ]\n                                    }\n                                },\n                                {\n                                    \"eventCall\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 977,\n                                                    \"name\": \"msg\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 2471,\n                                                    \"src\": \"11671:3:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_magic_message\",\n                                                        \"typeString\": \"msg\"\n                                                    }\n                                                },\n                                                \"id\": 978,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"memberName\": \"sender\",\n                                                \"nodeType\": \"MemberAccess\",\n                                                \"referencedDeclaration\": null,\n                                                \"src\": \"11671:10:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                    \"typeString\": \"address payable\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 979,\n                                                \"name\": \"collateralToken\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 780,\n                                                \"src\": \"11683:15:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                    \"typeString\": \"contract IERC20\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 980,\n                                                \"name\": \"parentCollectionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 782,\n                                                \"src\": \"11700:18:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 981,\n                                                \"name\": \"conditionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 784,\n                                                \"src\": \"11720:11:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 982,\n                                                \"name\": \"partition\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 787,\n                                                \"src\": \"11733:9:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                    \"typeString\": \"uint256[] calldata\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 983,\n                                                \"name\": \"amount\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 789,\n                                                \"src\": \"11744:6:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                    \"typeString\": \"address payable\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                    \"typeString\": \"contract IERC20\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                    \"typeString\": \"uint256[] calldata\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            ],\n                                            \"id\": 976,\n                                            \"name\": \"PositionsMerge\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 361,\n                                            \"src\": \"11656:14:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$2437_$_t_bytes32_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$__$\",\n                                                \"typeString\": \"function (address,contract IERC20,bytes32,bytes32,uint256[] memory,uint256)\"\n                                            }\n                                        },\n                                        \"id\": 984,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"11656:95:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 985,\n                                    \"nodeType\": \"EmitStatement\",\n                                    \"src\": \"11651:100:1\"\n                                }\n                            ]\n                        },\n                        \"documentation\": null,\n                        \"implemented\": true,\n                        \"kind\": \"function\",\n                        \"modifiers\": [],\n                        \"name\": \"mergePositions\",\n                        \"parameters\": {\n                            \"id\": 790,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 780,\n                                    \"name\": \"collateralToken\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 987,\n                                    \"src\": \"9714:22:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                        \"typeString\": \"contract IERC20\"\n                                    },\n                                    \"typeName\": {\n                                        \"contractScope\": null,\n                                        \"id\": 779,\n                                        \"name\": \"IERC20\",\n                                        \"nodeType\": \"UserDefinedTypeName\",\n                                        \"referencedDeclaration\": 2437,\n                                        \"src\": \"9714:6:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                            \"typeString\": \"contract IERC20\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 782,\n                                    \"name\": \"parentCollectionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 987,\n                                    \"src\": \"9746:26:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 781,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"9746:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 784,\n                                    \"name\": \"conditionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 987,\n                                    \"src\": \"9782:19:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 783,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"9782:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 787,\n                                    \"name\": \"partition\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 987,\n                                    \"src\": \"9811:25:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"calldata\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                        \"typeString\": \"uint256[]\"\n                                    },\n                                    \"typeName\": {\n                                        \"baseType\": {\n                                            \"id\": 785,\n                                            \"name\": \"uint\",\n                                            \"nodeType\": \"ElementaryTypeName\",\n                                            \"src\": \"9811:4:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"id\": 786,\n                                        \"length\": null,\n                                        \"nodeType\": \"ArrayTypeName\",\n                                        \"src\": \"9811:6:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                            \"typeString\": \"uint256[]\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 789,\n                                    \"name\": \"amount\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 987,\n                                    \"src\": \"9846:11:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 788,\n                                        \"name\": \"uint\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"9846:4:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"9704:159:1\"\n                        },\n                        \"returnParameters\": {\n                            \"id\": 791,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [],\n                            \"src\": \"9873:0:1\"\n                        },\n                        \"scope\": 1266,\n                        \"stateMutability\": \"nonpayable\",\n                        \"superFunction\": null,\n                        \"visibility\": \"external\"\n                    },\n                    {\n                        \"id\": 1198,\n                        \"nodeType\": \"FunctionDefinition\",\n                        \"src\": \"11764:1857:1\",\n                        \"body\": {\n                            \"id\": 1197,\n                            \"nodeType\": \"Block\",\n                            \"src\": \"11898:1723:1\",\n                            \"statements\": [\n                                {\n                                    \"assignments\": [1000],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 1000,\n                                            \"name\": \"den\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 1197,\n                                            \"src\": \"11908:8:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"default\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            },\n                                            \"typeName\": {\n                                                \"id\": 999,\n                                                \"name\": \"uint\",\n                                                \"nodeType\": \"ElementaryTypeName\",\n                                                \"src\": \"11908:4:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 1004,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"baseExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"id\": 1001,\n                                            \"name\": \"payoutDenominator\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 385,\n                                            \"src\": \"11919:17:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_uint256_$\",\n                                                \"typeString\": \"mapping(bytes32 => uint256)\"\n                                            }\n                                        },\n                                        \"id\": 1003,\n                                        \"indexExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"id\": 1002,\n                                            \"name\": \"conditionId\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 993,\n                                            \"src\": \"11937:11:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_bytes32\",\n                                                \"typeString\": \"bytes32\"\n                                            }\n                                        },\n                                        \"isConstant\": false,\n                                        \"isLValue\": true,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"nodeType\": \"IndexAccess\",\n                                        \"src\": \"11919:30:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"11908:41:1\"\n                                },\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"commonType\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                \"id\": 1008,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"leftExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 1006,\n                                                    \"name\": \"den\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 1000,\n                                                    \"src\": \"11967:3:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"BinaryOperation\",\n                                                \"operator\": \">\",\n                                                \"rightExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"hexValue\": \"30\",\n                                                    \"id\": 1007,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": true,\n                                                    \"kind\": \"number\",\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"Literal\",\n                                                    \"src\": \"11973:1:1\",\n                                                    \"subdenomination\": null,\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                        \"typeString\": \"int_const 0\"\n                                                    },\n                                                    \"value\": \"0\"\n                                                },\n                                                \"src\": \"11967:7:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"hexValue\": \"726573756c7420666f7220636f6e646974696f6e206e6f7420726563656976656420796574\",\n                                                \"id\": 1009,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": true,\n                                                \"kind\": \"string\",\n                                                \"lValueRequested\": false,\n                                                \"nodeType\": \"Literal\",\n                                                \"src\": \"11976:39:1\",\n                                                \"subdenomination\": null,\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_stringliteral_09c18322476c8839a929e9b1b47022e0ac639da367088768fc0757a67e966311\",\n                                                    \"typeString\": \"literal_string \\\"result for condition not received yet\\\"\"\n                                                },\n                                                \"value\": \"result for condition not received yet\"\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_stringliteral_09c18322476c8839a929e9b1b47022e0ac639da367088768fc0757a67e966311\",\n                                                    \"typeString\": \"literal_string \\\"result for condition not received yet\\\"\"\n                                                }\n                                            ],\n                                            \"id\": 1005,\n                                            \"name\": \"require\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [2474, 2475],\n                                            \"referencedDeclaration\": 2475,\n                                            \"src\": \"11959:7:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                \"typeString\": \"function (bool,string memory) pure\"\n                                            }\n                                        },\n                                        \"id\": 1010,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"11959:57:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 1011,\n                                    \"nodeType\": \"ExpressionStatement\",\n                                    \"src\": \"11959:57:1\"\n                                },\n                                {\n                                    \"assignments\": [1013],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 1013,\n                                            \"name\": \"outcomeSlotCount\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 1197,\n                                            \"src\": \"12026:21:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"default\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            },\n                                            \"typeName\": {\n                                                \"id\": 1012,\n                                                \"name\": \"uint\",\n                                                \"nodeType\": \"ElementaryTypeName\",\n                                                \"src\": \"12026:4:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 1018,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"expression\": {\n                                            \"argumentTypes\": null,\n                                            \"baseExpression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1014,\n                                                \"name\": \"payoutNumerators\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 381,\n                                                \"src\": \"12050:16:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$\",\n                                                    \"typeString\": \"mapping(bytes32 => uint256[] storage ref)\"\n                                                }\n                                            },\n                                            \"id\": 1016,\n                                            \"indexExpression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1015,\n                                                \"name\": \"conditionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 993,\n                                                \"src\": \"12067:11:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            \"isConstant\": false,\n                                            \"isLValue\": true,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"IndexAccess\",\n                                            \"src\": \"12050:29:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage\",\n                                                \"typeString\": \"uint256[] storage ref\"\n                                            }\n                                        },\n                                        \"id\": 1017,\n                                        \"isConstant\": false,\n                                        \"isLValue\": true,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"memberName\": \"length\",\n                                        \"nodeType\": \"MemberAccess\",\n                                        \"referencedDeclaration\": null,\n                                        \"src\": \"12050:36:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"12026:60:1\"\n                                },\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"commonType\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                \"id\": 1022,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"leftExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 1020,\n                                                    \"name\": \"outcomeSlotCount\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 1013,\n                                                    \"src\": \"12104:16:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"BinaryOperation\",\n                                                \"operator\": \">\",\n                                                \"rightExpression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"hexValue\": \"30\",\n                                                    \"id\": 1021,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": true,\n                                                    \"kind\": \"number\",\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"Literal\",\n                                                    \"src\": \"12123:1:1\",\n                                                    \"subdenomination\": null,\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                        \"typeString\": \"int_const 0\"\n                                                    },\n                                                    \"value\": \"0\"\n                                                },\n                                                \"src\": \"12104:20:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"hexValue\": \"636f6e646974696f6e206e6f7420707265706172656420796574\",\n                                                \"id\": 1023,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": true,\n                                                \"kind\": \"string\",\n                                                \"lValueRequested\": false,\n                                                \"nodeType\": \"Literal\",\n                                                \"src\": \"12126:28:1\",\n                                                \"subdenomination\": null,\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_stringliteral_e04bbd75ab4a1437326ef11a696b620d013bedb4db855d7241cc1435c81cd55a\",\n                                                    \"typeString\": \"literal_string \\\"condition not prepared yet\\\"\"\n                                                },\n                                                \"value\": \"condition not prepared yet\"\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_bool\",\n                                                    \"typeString\": \"bool\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_stringliteral_e04bbd75ab4a1437326ef11a696b620d013bedb4db855d7241cc1435c81cd55a\",\n                                                    \"typeString\": \"literal_string \\\"condition not prepared yet\\\"\"\n                                                }\n                                            ],\n                                            \"id\": 1019,\n                                            \"name\": \"require\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [2474, 2475],\n                                            \"referencedDeclaration\": 2475,\n                                            \"src\": \"12096:7:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                \"typeString\": \"function (bool,string memory) pure\"\n                                            }\n                                        },\n                                        \"id\": 1024,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"12096:59:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 1025,\n                                    \"nodeType\": \"ExpressionStatement\",\n                                    \"src\": \"12096:59:1\"\n                                },\n                                {\n                                    \"assignments\": [1027],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 1027,\n                                            \"name\": \"totalPayout\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 1197,\n                                            \"src\": \"12166:16:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"default\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            },\n                                            \"typeName\": {\n                                                \"id\": 1026,\n                                                \"name\": \"uint\",\n                                                \"nodeType\": \"ElementaryTypeName\",\n                                                \"src\": \"12166:4:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 1029,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"hexValue\": \"30\",\n                                        \"id\": 1028,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": true,\n                                        \"kind\": \"number\",\n                                        \"lValueRequested\": false,\n                                        \"nodeType\": \"Literal\",\n                                        \"src\": \"12185:1:1\",\n                                        \"subdenomination\": null,\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                                            \"typeString\": \"int_const 0\"\n                                        },\n                                        \"value\": \"0\"\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"12166:20:1\"\n                                },\n                                {\n                                    \"assignments\": [1031],\n                                    \"declarations\": [\n                                        {\n                                            \"constant\": false,\n                                            \"id\": 1031,\n                                            \"name\": \"fullIndexSet\",\n                                            \"nodeType\": \"VariableDeclaration\",\n                                            \"scope\": 1197,\n                                            \"src\": \"12197:17:1\",\n                                            \"stateVariable\": false,\n                                            \"storageLocation\": \"default\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            },\n                                            \"typeName\": {\n                                                \"id\": 1030,\n                                                \"name\": \"uint\",\n                                                \"nodeType\": \"ElementaryTypeName\",\n                                                \"src\": \"12197:4:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            },\n                                            \"value\": null,\n                                            \"visibility\": \"internal\"\n                                        }\n                                    ],\n                                    \"id\": 1038,\n                                    \"initialValue\": {\n                                        \"argumentTypes\": null,\n                                        \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        },\n                                        \"id\": 1037,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"leftExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"components\": [\n                                                {\n                                                    \"argumentTypes\": null,\n                                                    \"commonType\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    },\n                                                    \"id\": 1034,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"leftExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"hexValue\": \"31\",\n                                                        \"id\": 1032,\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": false,\n                                                        \"isPure\": true,\n                                                        \"kind\": \"number\",\n                                                        \"lValueRequested\": false,\n                                                        \"nodeType\": \"Literal\",\n                                                        \"src\": \"12218:1:1\",\n                                                        \"subdenomination\": null,\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_rational_1_by_1\",\n                                                            \"typeString\": \"int_const 1\"\n                                                        },\n                                                        \"value\": \"1\"\n                                                    },\n                                                    \"nodeType\": \"BinaryOperation\",\n                                                    \"operator\": \"<<\",\n                                                    \"rightExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 1033,\n                                                        \"name\": \"outcomeSlotCount\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 1013,\n                                                        \"src\": \"12223:16:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"src\": \"12218:21:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                }\n                                            ],\n                                            \"id\": 1035,\n                                            \"isConstant\": false,\n                                            \"isInlineArray\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"TupleExpression\",\n                                            \"src\": \"12217:23:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"nodeType\": \"BinaryOperation\",\n                                        \"operator\": \"-\",\n                                        \"rightExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"hexValue\": \"31\",\n                                            \"id\": 1036,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": true,\n                                            \"kind\": \"number\",\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"Literal\",\n                                            \"src\": \"12243:1:1\",\n                                            \"subdenomination\": null,\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_rational_1_by_1\",\n                                                \"typeString\": \"int_const 1\"\n                                            },\n                                            \"value\": \"1\"\n                                        },\n                                        \"src\": \"12217:27:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                    \"src\": \"12197:47:1\"\n                                },\n                                {\n                                    \"body\": {\n                                        \"id\": 1150,\n                                        \"nodeType\": \"Block\",\n                                        \"src\": \"12298:834:1\",\n                                        \"statements\": [\n                                            {\n                                                \"assignments\": [1051],\n                                                \"declarations\": [\n                                                    {\n                                                        \"constant\": false,\n                                                        \"id\": 1051,\n                                                        \"name\": \"indexSet\",\n                                                        \"nodeType\": \"VariableDeclaration\",\n                                                        \"scope\": 1150,\n                                                        \"src\": \"12312:13:1\",\n                                                        \"stateVariable\": false,\n                                                        \"storageLocation\": \"default\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        },\n                                                        \"typeName\": {\n                                                            \"id\": 1050,\n                                                            \"name\": \"uint\",\n                                                            \"nodeType\": \"ElementaryTypeName\",\n                                                            \"src\": \"12312:4:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        },\n                                                        \"value\": null,\n                                                        \"visibility\": \"internal\"\n                                                    }\n                                                ],\n                                                \"id\": 1055,\n                                                \"initialValue\": {\n                                                    \"argumentTypes\": null,\n                                                    \"baseExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 1052,\n                                                        \"name\": \"indexSets\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 996,\n                                                        \"src\": \"12328:9:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                            \"typeString\": \"uint256[] calldata\"\n                                                        }\n                                                    },\n                                                    \"id\": 1054,\n                                                    \"indexExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 1053,\n                                                        \"name\": \"i\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 1040,\n                                                        \"src\": \"12338:1:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"IndexAccess\",\n                                                    \"src\": \"12328:12:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"VariableDeclarationStatement\",\n                                                \"src\": \"12312:28:1\"\n                                            },\n                                            {\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"arguments\": [\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"commonType\": {\n                                                                \"typeIdentifier\": \"t_bool\",\n                                                                \"typeString\": \"bool\"\n                                                            },\n                                                            \"id\": 1063,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": false,\n                                                            \"lValueRequested\": false,\n                                                            \"leftExpression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"commonType\": {\n                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                    \"typeString\": \"uint256\"\n                                                                },\n                                                                \"id\": 1059,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"lValueRequested\": false,\n                                                                \"leftExpression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 1057,\n                                                                    \"name\": \"indexSet\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 1051,\n                                                                    \"src\": \"12362:8:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                        \"typeString\": \"uint256\"\n                                                                    }\n                                                                },\n                                                                \"nodeType\": \"BinaryOperation\",\n                                                                \"operator\": \">\",\n                                                                \"rightExpression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"hexValue\": \"30\",\n                                                                    \"id\": 1058,\n                                                                    \"isConstant\": false,\n                                                                    \"isLValue\": false,\n                                                                    \"isPure\": true,\n                                                                    \"kind\": \"number\",\n                                                                    \"lValueRequested\": false,\n                                                                    \"nodeType\": \"Literal\",\n                                                                    \"src\": \"12373:1:1\",\n                                                                    \"subdenomination\": null,\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                                        \"typeString\": \"int_const 0\"\n                                                                    },\n                                                                    \"value\": \"0\"\n                                                                },\n                                                                \"src\": \"12362:12:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_bool\",\n                                                                    \"typeString\": \"bool\"\n                                                                }\n                                                            },\n                                                            \"nodeType\": \"BinaryOperation\",\n                                                            \"operator\": \"&&\",\n                                                            \"rightExpression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"commonType\": {\n                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                    \"typeString\": \"uint256\"\n                                                                },\n                                                                \"id\": 1062,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"lValueRequested\": false,\n                                                                \"leftExpression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 1060,\n                                                                    \"name\": \"indexSet\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 1051,\n                                                                    \"src\": \"12378:8:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                        \"typeString\": \"uint256\"\n                                                                    }\n                                                                },\n                                                                \"nodeType\": \"BinaryOperation\",\n                                                                \"operator\": \"<\",\n                                                                \"rightExpression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 1061,\n                                                                    \"name\": \"fullIndexSet\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 1031,\n                                                                    \"src\": \"12389:12:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                        \"typeString\": \"uint256\"\n                                                                    }\n                                                                },\n                                                                \"src\": \"12378:23:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_bool\",\n                                                                    \"typeString\": \"bool\"\n                                                                }\n                                                            },\n                                                            \"src\": \"12362:39:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_bool\",\n                                                                \"typeString\": \"bool\"\n                                                            }\n                                                        },\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"hexValue\": \"676f7420696e76616c696420696e64657820736574\",\n                                                            \"id\": 1064,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": true,\n                                                            \"kind\": \"string\",\n                                                            \"lValueRequested\": false,\n                                                            \"nodeType\": \"Literal\",\n                                                            \"src\": \"12403:23:1\",\n                                                            \"subdenomination\": null,\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_stringliteral_6a6949259bc762cfed0fdf355e0e833a39c80f6df01cfb722c2d69f034e6a9c2\",\n                                                                \"typeString\": \"literal_string \\\"got invalid index set\\\"\"\n                                                            },\n                                                            \"value\": \"got invalid index set\"\n                                                        }\n                                                    ],\n                                                    \"expression\": {\n                                                        \"argumentTypes\": [\n                                                            {\n                                                                \"typeIdentifier\": \"t_bool\",\n                                                                \"typeString\": \"bool\"\n                                                            },\n                                                            {\n                                                                \"typeIdentifier\": \"t_stringliteral_6a6949259bc762cfed0fdf355e0e833a39c80f6df01cfb722c2d69f034e6a9c2\",\n                                                                \"typeString\": \"literal_string \\\"got invalid index set\\\"\"\n                                                            }\n                                                        ],\n                                                        \"id\": 1056,\n                                                        \"name\": \"require\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [2474, 2475],\n                                                        \"referencedDeclaration\": 2475,\n                                                        \"src\": \"12354:7:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                            \"typeString\": \"function (bool,string memory) pure\"\n                                                        }\n                                                    },\n                                                    \"id\": 1065,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"kind\": \"functionCall\",\n                                                    \"lValueRequested\": false,\n                                                    \"names\": [],\n                                                    \"nodeType\": \"FunctionCall\",\n                                                    \"src\": \"12354:73:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_tuple$__$\",\n                                                        \"typeString\": \"tuple()\"\n                                                    }\n                                                },\n                                                \"id\": 1066,\n                                                \"nodeType\": \"ExpressionStatement\",\n                                                \"src\": \"12354:73:1\"\n                                            },\n                                            {\n                                                \"assignments\": [1068],\n                                                \"declarations\": [\n                                                    {\n                                                        \"constant\": false,\n                                                        \"id\": 1068,\n                                                        \"name\": \"positionId\",\n                                                        \"nodeType\": \"VariableDeclaration\",\n                                                        \"scope\": 1150,\n                                                        \"src\": \"12441:15:1\",\n                                                        \"stateVariable\": false,\n                                                        \"storageLocation\": \"default\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        },\n                                                        \"typeName\": {\n                                                            \"id\": 1067,\n                                                            \"name\": \"uint\",\n                                                            \"nodeType\": \"ElementaryTypeName\",\n                                                            \"src\": \"12441:4:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        },\n                                                        \"value\": null,\n                                                        \"visibility\": \"internal\"\n                                                    }\n                                                ],\n                                                \"id\": 1079,\n                                                \"initialValue\": {\n                                                    \"argumentTypes\": null,\n                                                    \"arguments\": [\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 1071,\n                                                            \"name\": \"collateralToken\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 989,\n                                                            \"src\": \"12483:15:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                \"typeString\": \"contract IERC20\"\n                                                            }\n                                                        },\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"arguments\": [\n                                                                {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 1074,\n                                                                    \"name\": \"parentCollectionId\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 991,\n                                                                    \"src\": \"12542:18:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_bytes32\",\n                                                                        \"typeString\": \"bytes32\"\n                                                                    }\n                                                                },\n                                                                {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 1075,\n                                                                    \"name\": \"conditionId\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 993,\n                                                                    \"src\": \"12562:11:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_bytes32\",\n                                                                        \"typeString\": \"bytes32\"\n                                                                    }\n                                                                },\n                                                                {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 1076,\n                                                                    \"name\": \"indexSet\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 1051,\n                                                                    \"src\": \"12575:8:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                        \"typeString\": \"uint256\"\n                                                                    }\n                                                                }\n                                                            ],\n                                                            \"expression\": {\n                                                                \"argumentTypes\": [\n                                                                    {\n                                                                        \"typeIdentifier\": \"t_bytes32\",\n                                                                        \"typeString\": \"bytes32\"\n                                                                    },\n                                                                    {\n                                                                        \"typeIdentifier\": \"t_bytes32\",\n                                                                        \"typeString\": \"bytes32\"\n                                                                    },\n                                                                    {\n                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                        \"typeString\": \"uint256\"\n                                                                    }\n                                                                ],\n                                                                \"expression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 1072,\n                                                                    \"name\": \"CTHelpers\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 298,\n                                                                    \"src\": \"12516:9:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                                        \"typeString\": \"type(library CTHelpers)\"\n                                                                    }\n                                                                },\n                                                                \"id\": 1073,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"lValueRequested\": false,\n                                                                \"memberName\": \"getCollectionId\",\n                                                                \"nodeType\": \"MemberAccess\",\n                                                                \"referencedDeclaration\": 277,\n                                                                \"src\": \"12516:25:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$\",\n                                                                    \"typeString\": \"function (bytes32,bytes32,uint256) view returns (bytes32)\"\n                                                                }\n                                                            },\n                                                            \"id\": 1077,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": false,\n                                                            \"kind\": \"functionCall\",\n                                                            \"lValueRequested\": false,\n                                                            \"names\": [],\n                                                            \"nodeType\": \"FunctionCall\",\n                                                            \"src\": \"12516:68:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_bytes32\",\n                                                                \"typeString\": \"bytes32\"\n                                                            }\n                                                        }\n                                                    ],\n                                                    \"expression\": {\n                                                        \"argumentTypes\": [\n                                                            {\n                                                                \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                \"typeString\": \"contract IERC20\"\n                                                            },\n                                                            {\n                                                                \"typeIdentifier\": \"t_bytes32\",\n                                                                \"typeString\": \"bytes32\"\n                                                            }\n                                                        ],\n                                                        \"expression\": {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 1069,\n                                                            \"name\": \"CTHelpers\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 298,\n                                                            \"src\": \"12459:9:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                                \"typeString\": \"type(library CTHelpers)\"\n                                                            }\n                                                        },\n                                                        \"id\": 1070,\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": false,\n                                                        \"isPure\": false,\n                                                        \"lValueRequested\": false,\n                                                        \"memberName\": \"getPositionId\",\n                                                        \"nodeType\": \"MemberAccess\",\n                                                        \"referencedDeclaration\": 297,\n                                                        \"src\": \"12459:23:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_function_internal_pure$_t_contract$_IERC20_$2437_$_t_bytes32_$returns$_t_uint256_$\",\n                                                            \"typeString\": \"function (contract IERC20,bytes32) pure returns (uint256)\"\n                                                        }\n                                                    },\n                                                    \"id\": 1078,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"kind\": \"functionCall\",\n                                                    \"lValueRequested\": false,\n                                                    \"names\": [],\n                                                    \"nodeType\": \"FunctionCall\",\n                                                    \"src\": \"12459:126:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"VariableDeclarationStatement\",\n                                                \"src\": \"12441:144:1\"\n                                            },\n                                            {\n                                                \"assignments\": [1081],\n                                                \"declarations\": [\n                                                    {\n                                                        \"constant\": false,\n                                                        \"id\": 1081,\n                                                        \"name\": \"payoutNumerator\",\n                                                        \"nodeType\": \"VariableDeclaration\",\n                                                        \"scope\": 1150,\n                                                        \"src\": \"12600:20:1\",\n                                                        \"stateVariable\": false,\n                                                        \"storageLocation\": \"default\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        },\n                                                        \"typeName\": {\n                                                            \"id\": 1080,\n                                                            \"name\": \"uint\",\n                                                            \"nodeType\": \"ElementaryTypeName\",\n                                                            \"src\": \"12600:4:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        },\n                                                        \"value\": null,\n                                                        \"visibility\": \"internal\"\n                                                    }\n                                                ],\n                                                \"id\": 1083,\n                                                \"initialValue\": {\n                                                    \"argumentTypes\": null,\n                                                    \"hexValue\": \"30\",\n                                                    \"id\": 1082,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": true,\n                                                    \"kind\": \"number\",\n                                                    \"lValueRequested\": false,\n                                                    \"nodeType\": \"Literal\",\n                                                    \"src\": \"12623:1:1\",\n                                                    \"subdenomination\": null,\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                        \"typeString\": \"int_const 0\"\n                                                    },\n                                                    \"value\": \"0\"\n                                                },\n                                                \"nodeType\": \"VariableDeclarationStatement\",\n                                                \"src\": \"12600:24:1\"\n                                            },\n                                            {\n                                                \"body\": {\n                                                    \"id\": 1115,\n                                                    \"nodeType\": \"Block\",\n                                                    \"src\": \"12682:174:1\",\n                                                    \"statements\": [\n                                                        {\n                                                            \"condition\": {\n                                                                \"argumentTypes\": null,\n                                                                \"commonType\": {\n                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                    \"typeString\": \"uint256\"\n                                                                },\n                                                                \"id\": 1101,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"lValueRequested\": false,\n                                                                \"leftExpression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"commonType\": {\n                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                        \"typeString\": \"uint256\"\n                                                                    },\n                                                                    \"id\": 1099,\n                                                                    \"isConstant\": false,\n                                                                    \"isLValue\": false,\n                                                                    \"isPure\": false,\n                                                                    \"lValueRequested\": false,\n                                                                    \"leftExpression\": {\n                                                                        \"argumentTypes\": null,\n                                                                        \"id\": 1094,\n                                                                        \"name\": \"indexSet\",\n                                                                        \"nodeType\": \"Identifier\",\n                                                                        \"overloadedDeclarations\": [],\n                                                                        \"referencedDeclaration\": 1051,\n                                                                        \"src\": \"12704:8:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    },\n                                                                    \"nodeType\": \"BinaryOperation\",\n                                                                    \"operator\": \"&\",\n                                                                    \"rightExpression\": {\n                                                                        \"argumentTypes\": null,\n                                                                        \"components\": [\n                                                                            {\n                                                                                \"argumentTypes\": null,\n                                                                                \"commonType\": {\n                                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                                    \"typeString\": \"uint256\"\n                                                                                },\n                                                                                \"id\": 1097,\n                                                                                \"isConstant\": false,\n                                                                                \"isLValue\": false,\n                                                                                \"isPure\": false,\n                                                                                \"lValueRequested\": false,\n                                                                                \"leftExpression\": {\n                                                                                    \"argumentTypes\": null,\n                                                                                    \"hexValue\": \"31\",\n                                                                                    \"id\": 1095,\n                                                                                    \"isConstant\": false,\n                                                                                    \"isLValue\": false,\n                                                                                    \"isPure\": true,\n                                                                                    \"kind\": \"number\",\n                                                                                    \"lValueRequested\": false,\n                                                                                    \"nodeType\": \"Literal\",\n                                                                                    \"src\": \"12716:1:1\",\n                                                                                    \"subdenomination\": null,\n                                                                                    \"typeDescriptions\": {\n                                                                                        \"typeIdentifier\": \"t_rational_1_by_1\",\n                                                                                        \"typeString\": \"int_const 1\"\n                                                                                    },\n                                                                                    \"value\": \"1\"\n                                                                                },\n                                                                                \"nodeType\": \"BinaryOperation\",\n                                                                                \"operator\": \"<<\",\n                                                                                \"rightExpression\": {\n                                                                                    \"argumentTypes\": null,\n                                                                                    \"id\": 1096,\n                                                                                    \"name\": \"j\",\n                                                                                    \"nodeType\": \"Identifier\",\n                                                                                    \"overloadedDeclarations\": [],\n                                                                                    \"referencedDeclaration\": 1085,\n                                                                                    \"src\": \"12721:1:1\",\n                                                                                    \"typeDescriptions\": {\n                                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                                        \"typeString\": \"uint256\"\n                                                                                    }\n                                                                                },\n                                                                                \"src\": \"12716:6:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                                    \"typeString\": \"uint256\"\n                                                                                }\n                                                                            }\n                                                                        ],\n                                                                        \"id\": 1098,\n                                                                        \"isConstant\": false,\n                                                                        \"isInlineArray\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": false,\n                                                                        \"lValueRequested\": false,\n                                                                        \"nodeType\": \"TupleExpression\",\n                                                                        \"src\": \"12715:8:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    },\n                                                                    \"src\": \"12704:19:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                        \"typeString\": \"uint256\"\n                                                                    }\n                                                                },\n                                                                \"nodeType\": \"BinaryOperation\",\n                                                                \"operator\": \"!=\",\n                                                                \"rightExpression\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"hexValue\": \"30\",\n                                                                    \"id\": 1100,\n                                                                    \"isConstant\": false,\n                                                                    \"isLValue\": false,\n                                                                    \"isPure\": true,\n                                                                    \"kind\": \"number\",\n                                                                    \"lValueRequested\": false,\n                                                                    \"nodeType\": \"Literal\",\n                                                                    \"src\": \"12727:1:1\",\n                                                                    \"subdenomination\": null,\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                                        \"typeString\": \"int_const 0\"\n                                                                    },\n                                                                    \"value\": \"0\"\n                                                                },\n                                                                \"src\": \"12704:24:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_bool\",\n                                                                    \"typeString\": \"bool\"\n                                                                }\n                                                            },\n                                                            \"falseBody\": null,\n                                                            \"id\": 1114,\n                                                            \"nodeType\": \"IfStatement\",\n                                                            \"src\": \"12700:142:1\",\n                                                            \"trueBody\": {\n                                                                \"id\": 1113,\n                                                                \"nodeType\": \"Block\",\n                                                                \"src\": \"12730:112:1\",\n                                                                \"statements\": [\n                                                                    {\n                                                                        \"expression\": {\n                                                                            \"argumentTypes\": null,\n                                                                            \"id\": 1111,\n                                                                            \"isConstant\": false,\n                                                                            \"isLValue\": false,\n                                                                            \"isPure\": false,\n                                                                            \"lValueRequested\": false,\n                                                                            \"leftHandSide\": {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 1102,\n                                                                                \"name\": \"payoutNumerator\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 1081,\n                                                                                \"src\": \"12752:15:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                                    \"typeString\": \"uint256\"\n                                                                                }\n                                                                            },\n                                                                            \"nodeType\": \"Assignment\",\n                                                                            \"operator\": \"=\",\n                                                                            \"rightHandSide\": {\n                                                                                \"argumentTypes\": null,\n                                                                                \"arguments\": [\n                                                                                    {\n                                                                                        \"argumentTypes\": null,\n                                                                                        \"baseExpression\": {\n                                                                                            \"argumentTypes\": null,\n                                                                                            \"baseExpression\": {\n                                                                                                \"argumentTypes\": null,\n                                                                                                \"id\": 1105,\n                                                                                                \"name\": \"payoutNumerators\",\n                                                                                                \"nodeType\": \"Identifier\",\n                                                                                                \"overloadedDeclarations\": [],\n                                                                                                \"referencedDeclaration\": 381,\n                                                                                                \"src\": \"12790:16:1\",\n                                                                                                \"typeDescriptions\": {\n                                                                                                    \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$\",\n                                                                                                    \"typeString\": \"mapping(bytes32 => uint256[] storage ref)\"\n                                                                                                }\n                                                                                            },\n                                                                                            \"id\": 1107,\n                                                                                            \"indexExpression\": {\n                                                                                                \"argumentTypes\": null,\n                                                                                                \"id\": 1106,\n                                                                                                \"name\": \"conditionId\",\n                                                                                                \"nodeType\": \"Identifier\",\n                                                                                                \"overloadedDeclarations\": [],\n                                                                                                \"referencedDeclaration\": 993,\n                                                                                                \"src\": \"12807:11:1\",\n                                                                                                \"typeDescriptions\": {\n                                                                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                                                                    \"typeString\": \"bytes32\"\n                                                                                                }\n                                                                                            },\n                                                                                            \"isConstant\": false,\n                                                                                            \"isLValue\": true,\n                                                                                            \"isPure\": false,\n                                                                                            \"lValueRequested\": false,\n                                                                                            \"nodeType\": \"IndexAccess\",\n                                                                                            \"src\": \"12790:29:1\",\n                                                                                            \"typeDescriptions\": {\n                                                                                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage\",\n                                                                                                \"typeString\": \"uint256[] storage ref\"\n                                                                                            }\n                                                                                        },\n                                                                                        \"id\": 1109,\n                                                                                        \"indexExpression\": {\n                                                                                            \"argumentTypes\": null,\n                                                                                            \"id\": 1108,\n                                                                                            \"name\": \"j\",\n                                                                                            \"nodeType\": \"Identifier\",\n                                                                                            \"overloadedDeclarations\": [],\n                                                                                            \"referencedDeclaration\": 1085,\n                                                                                            \"src\": \"12820:1:1\",\n                                                                                            \"typeDescriptions\": {\n                                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                                \"typeString\": \"uint256\"\n                                                                                            }\n                                                                                        },\n                                                                                        \"isConstant\": false,\n                                                                                        \"isLValue\": true,\n                                                                                        \"isPure\": false,\n                                                                                        \"lValueRequested\": false,\n                                                                                        \"nodeType\": \"IndexAccess\",\n                                                                                        \"src\": \"12790:32:1\",\n                                                                                        \"typeDescriptions\": {\n                                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                                            \"typeString\": \"uint256\"\n                                                                                        }\n                                                                                    }\n                                                                                ],\n                                                                                \"expression\": {\n                                                                                    \"argumentTypes\": [\n                                                                                        {\n                                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                                            \"typeString\": \"uint256\"\n                                                                                        }\n                                                                                    ],\n                                                                                    \"expression\": {\n                                                                                        \"argumentTypes\": null,\n                                                                                        \"id\": 1103,\n                                                                                        \"name\": \"payoutNumerator\",\n                                                                                        \"nodeType\": \"Identifier\",\n                                                                                        \"overloadedDeclarations\": [],\n                                                                                        \"referencedDeclaration\": 1081,\n                                                                                        \"src\": \"12770:15:1\",\n                                                                                        \"typeDescriptions\": {\n                                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                                            \"typeString\": \"uint256\"\n                                                                                        }\n                                                                                    },\n                                                                                    \"id\": 1104,\n                                                                                    \"isConstant\": false,\n                                                                                    \"isLValue\": false,\n                                                                                    \"isPure\": false,\n                                                                                    \"lValueRequested\": false,\n                                                                                    \"memberName\": \"add\",\n                                                                                    \"nodeType\": \"MemberAccess\",\n                                                                                    \"referencedDeclaration\": 2262,\n                                                                                    \"src\": \"12770:19:1\",\n                                                                                    \"typeDescriptions\": {\n                                                                                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                                                                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                                                                    }\n                                                                                },\n                                                                                \"id\": 1110,\n                                                                                \"isConstant\": false,\n                                                                                \"isLValue\": false,\n                                                                                \"isPure\": false,\n                                                                                \"kind\": \"functionCall\",\n                                                                                \"lValueRequested\": false,\n                                                                                \"names\": [],\n                                                                                \"nodeType\": \"FunctionCall\",\n                                                                                \"src\": \"12770:53:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                                    \"typeString\": \"uint256\"\n                                                                                }\n                                                                            },\n                                                                            \"src\": \"12752:71:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                \"typeString\": \"uint256\"\n                                                                            }\n                                                                        },\n                                                                        \"id\": 1112,\n                                                                        \"nodeType\": \"ExpressionStatement\",\n                                                                        \"src\": \"12752:71:1\"\n                                                                    }\n                                                                ]\n                                                            }\n                                                        }\n                                                    ]\n                                                },\n                                                \"condition\": {\n                                                    \"argumentTypes\": null,\n                                                    \"commonType\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    },\n                                                    \"id\": 1090,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"leftExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 1088,\n                                                        \"name\": \"j\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 1085,\n                                                        \"src\": \"12655:1:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"nodeType\": \"BinaryOperation\",\n                                                    \"operator\": \"<\",\n                                                    \"rightExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 1089,\n                                                        \"name\": \"outcomeSlotCount\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 1013,\n                                                        \"src\": \"12659:16:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"src\": \"12655:20:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_bool\",\n                                                        \"typeString\": \"bool\"\n                                                    }\n                                                },\n                                                \"id\": 1116,\n                                                \"initializationExpression\": {\n                                                    \"assignments\": [1085],\n                                                    \"declarations\": [\n                                                        {\n                                                            \"constant\": false,\n                                                            \"id\": 1085,\n                                                            \"name\": \"j\",\n                                                            \"nodeType\": \"VariableDeclaration\",\n                                                            \"scope\": 1116,\n                                                            \"src\": \"12643:6:1\",\n                                                            \"stateVariable\": false,\n                                                            \"storageLocation\": \"default\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            },\n                                                            \"typeName\": {\n                                                                \"id\": 1084,\n                                                                \"name\": \"uint\",\n                                                                \"nodeType\": \"ElementaryTypeName\",\n                                                                \"src\": \"12643:4:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                    \"typeString\": \"uint256\"\n                                                                }\n                                                            },\n                                                            \"value\": null,\n                                                            \"visibility\": \"internal\"\n                                                        }\n                                                    ],\n                                                    \"id\": 1087,\n                                                    \"initialValue\": {\n                                                        \"argumentTypes\": null,\n                                                        \"hexValue\": \"30\",\n                                                        \"id\": 1086,\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": false,\n                                                        \"isPure\": true,\n                                                        \"kind\": \"number\",\n                                                        \"lValueRequested\": false,\n                                                        \"nodeType\": \"Literal\",\n                                                        \"src\": \"12652:1:1\",\n                                                        \"subdenomination\": null,\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                            \"typeString\": \"int_const 0\"\n                                                        },\n                                                        \"value\": \"0\"\n                                                    },\n                                                    \"nodeType\": \"VariableDeclarationStatement\",\n                                                    \"src\": \"12643:10:1\"\n                                                },\n                                                \"loopExpression\": {\n                                                    \"expression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 1092,\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": false,\n                                                        \"isPure\": false,\n                                                        \"lValueRequested\": false,\n                                                        \"nodeType\": \"UnaryOperation\",\n                                                        \"operator\": \"++\",\n                                                        \"prefix\": false,\n                                                        \"src\": \"12677:3:1\",\n                                                        \"subExpression\": {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 1091,\n                                                            \"name\": \"j\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 1085,\n                                                            \"src\": \"12677:1:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        },\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"id\": 1093,\n                                                    \"nodeType\": \"ExpressionStatement\",\n                                                    \"src\": \"12677:3:1\"\n                                                },\n                                                \"nodeType\": \"ForStatement\",\n                                                \"src\": \"12638:218:1\"\n                                            },\n                                            {\n                                                \"assignments\": [1118],\n                                                \"declarations\": [\n                                                    {\n                                                        \"constant\": false,\n                                                        \"id\": 1118,\n                                                        \"name\": \"payoutStake\",\n                                                        \"nodeType\": \"VariableDeclaration\",\n                                                        \"scope\": 1150,\n                                                        \"src\": \"12870:16:1\",\n                                                        \"stateVariable\": false,\n                                                        \"storageLocation\": \"default\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        },\n                                                        \"typeName\": {\n                                                            \"id\": 1117,\n                                                            \"name\": \"uint\",\n                                                            \"nodeType\": \"ElementaryTypeName\",\n                                                            \"src\": \"12870:4:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        },\n                                                        \"value\": null,\n                                                        \"visibility\": \"internal\"\n                                                    }\n                                                ],\n                                                \"id\": 1124,\n                                                \"initialValue\": {\n                                                    \"argumentTypes\": null,\n                                                    \"arguments\": [\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"expression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"id\": 1120,\n                                                                \"name\": \"msg\",\n                                                                \"nodeType\": \"Identifier\",\n                                                                \"overloadedDeclarations\": [],\n                                                                \"referencedDeclaration\": 2471,\n                                                                \"src\": \"12899:3:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_magic_message\",\n                                                                    \"typeString\": \"msg\"\n                                                                }\n                                                            },\n                                                            \"id\": 1121,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": false,\n                                                            \"lValueRequested\": false,\n                                                            \"memberName\": \"sender\",\n                                                            \"nodeType\": \"MemberAccess\",\n                                                            \"referencedDeclaration\": null,\n                                                            \"src\": \"12899:10:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_address_payable\",\n                                                                \"typeString\": \"address payable\"\n                                                            }\n                                                        },\n                                                        {\n                                                            \"argumentTypes\": null,\n                                                            \"id\": 1122,\n                                                            \"name\": \"positionId\",\n                                                            \"nodeType\": \"Identifier\",\n                                                            \"overloadedDeclarations\": [],\n                                                            \"referencedDeclaration\": 1068,\n                                                            \"src\": \"12911:10:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        }\n                                                    ],\n                                                    \"expression\": {\n                                                        \"argumentTypes\": [\n                                                            {\n                                                                \"typeIdentifier\": \"t_address_payable\",\n                                                                \"typeString\": \"address payable\"\n                                                            },\n                                                            {\n                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                \"typeString\": \"uint256\"\n                                                            }\n                                                        ],\n                                                        \"id\": 1119,\n                                                        \"name\": \"balanceOf\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [1362],\n                                                        \"referencedDeclaration\": 1362,\n                                                        \"src\": \"12889:9:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$\",\n                                                            \"typeString\": \"function (address,uint256) view returns (uint256)\"\n                                                        }\n                                                    },\n                                                    \"id\": 1123,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"kind\": \"functionCall\",\n                                                    \"lValueRequested\": false,\n                                                    \"names\": [],\n                                                    \"nodeType\": \"FunctionCall\",\n                                                    \"src\": \"12889:33:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"nodeType\": \"VariableDeclarationStatement\",\n                                                \"src\": \"12870:52:1\"\n                                            },\n                                            {\n                                                \"condition\": {\n                                                    \"argumentTypes\": null,\n                                                    \"commonType\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    },\n                                                    \"id\": 1127,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"leftExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 1125,\n                                                        \"name\": \"payoutStake\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 1118,\n                                                        \"src\": \"12940:11:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_uint256\",\n                                                            \"typeString\": \"uint256\"\n                                                        }\n                                                    },\n                                                    \"nodeType\": \"BinaryOperation\",\n                                                    \"operator\": \">\",\n                                                    \"rightExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"hexValue\": \"30\",\n                                                        \"id\": 1126,\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": false,\n                                                        \"isPure\": true,\n                                                        \"kind\": \"number\",\n                                                        \"lValueRequested\": false,\n                                                        \"nodeType\": \"Literal\",\n                                                        \"src\": \"12954:1:1\",\n                                                        \"subdenomination\": null,\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                            \"typeString\": \"int_const 0\"\n                                                        },\n                                                        \"value\": \"0\"\n                                                    },\n                                                    \"src\": \"12940:15:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_bool\",\n                                                        \"typeString\": \"bool\"\n                                                    }\n                                                },\n                                                \"falseBody\": null,\n                                                \"id\": 1149,\n                                                \"nodeType\": \"IfStatement\",\n                                                \"src\": \"12936:186:1\",\n                                                \"trueBody\": {\n                                                    \"id\": 1148,\n                                                    \"nodeType\": \"Block\",\n                                                    \"src\": \"12957:165:1\",\n                                                    \"statements\": [\n                                                        {\n                                                            \"expression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"id\": 1139,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"lValueRequested\": false,\n                                                                \"leftHandSide\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"id\": 1128,\n                                                                    \"name\": \"totalPayout\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 1027,\n                                                                    \"src\": \"12975:11:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                        \"typeString\": \"uint256\"\n                                                                    }\n                                                                },\n                                                                \"nodeType\": \"Assignment\",\n                                                                \"operator\": \"=\",\n                                                                \"rightHandSide\": {\n                                                                    \"argumentTypes\": null,\n                                                                    \"arguments\": [\n                                                                        {\n                                                                            \"argumentTypes\": null,\n                                                                            \"arguments\": [\n                                                                                {\n                                                                                    \"argumentTypes\": null,\n                                                                                    \"id\": 1136,\n                                                                                    \"name\": \"den\",\n                                                                                    \"nodeType\": \"Identifier\",\n                                                                                    \"overloadedDeclarations\": [],\n                                                                                    \"referencedDeclaration\": 1000,\n                                                                                    \"src\": \"13042:3:1\",\n                                                                                    \"typeDescriptions\": {\n                                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                                        \"typeString\": \"uint256\"\n                                                                                    }\n                                                                                }\n                                                                            ],\n                                                                            \"expression\": {\n                                                                                \"argumentTypes\": [\n                                                                                    {\n                                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                                        \"typeString\": \"uint256\"\n                                                                                    }\n                                                                                ],\n                                                                                \"expression\": {\n                                                                                    \"argumentTypes\": null,\n                                                                                    \"arguments\": [\n                                                                                        {\n                                                                                            \"argumentTypes\": null,\n                                                                                            \"id\": 1133,\n                                                                                            \"name\": \"payoutNumerator\",\n                                                                                            \"nodeType\": \"Identifier\",\n                                                                                            \"overloadedDeclarations\": [],\n                                                                                            \"referencedDeclaration\": 1081,\n                                                                                            \"src\": \"13021:15:1\",\n                                                                                            \"typeDescriptions\": {\n                                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                                \"typeString\": \"uint256\"\n                                                                                            }\n                                                                                        }\n                                                                                    ],\n                                                                                    \"expression\": {\n                                                                                        \"argumentTypes\": [\n                                                                                            {\n                                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                                \"typeString\": \"uint256\"\n                                                                                            }\n                                                                                        ],\n                                                                                        \"expression\": {\n                                                                                            \"argumentTypes\": null,\n                                                                                            \"id\": 1131,\n                                                                                            \"name\": \"payoutStake\",\n                                                                                            \"nodeType\": \"Identifier\",\n                                                                                            \"overloadedDeclarations\": [],\n                                                                                            \"referencedDeclaration\": 1118,\n                                                                                            \"src\": \"13005:11:1\",\n                                                                                            \"typeDescriptions\": {\n                                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                                \"typeString\": \"uint256\"\n                                                                                            }\n                                                                                        },\n                                                                                        \"id\": 1132,\n                                                                                        \"isConstant\": false,\n                                                                                        \"isLValue\": false,\n                                                                                        \"isPure\": false,\n                                                                                        \"lValueRequested\": false,\n                                                                                        \"memberName\": \"mul\",\n                                                                                        \"nodeType\": \"MemberAccess\",\n                                                                                        \"referencedDeclaration\": 2321,\n                                                                                        \"src\": \"13005:15:1\",\n                                                                                        \"typeDescriptions\": {\n                                                                                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                                                                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                                                                        }\n                                                                                    },\n                                                                                    \"id\": 1134,\n                                                                                    \"isConstant\": false,\n                                                                                    \"isLValue\": false,\n                                                                                    \"isPure\": false,\n                                                                                    \"kind\": \"functionCall\",\n                                                                                    \"lValueRequested\": false,\n                                                                                    \"names\": [],\n                                                                                    \"nodeType\": \"FunctionCall\",\n                                                                                    \"src\": \"13005:32:1\",\n                                                                                    \"typeDescriptions\": {\n                                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                                        \"typeString\": \"uint256\"\n                                                                                    }\n                                                                                },\n                                                                                \"id\": 1135,\n                                                                                \"isConstant\": false,\n                                                                                \"isLValue\": false,\n                                                                                \"isPure\": false,\n                                                                                \"lValueRequested\": false,\n                                                                                \"memberName\": \"div\",\n                                                                                \"nodeType\": \"MemberAccess\",\n                                                                                \"referencedDeclaration\": 2346,\n                                                                                \"src\": \"13005:36:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                                                                    \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                                                                }\n                                                                            },\n                                                                            \"id\": 1137,\n                                                                            \"isConstant\": false,\n                                                                            \"isLValue\": false,\n                                                                            \"isPure\": false,\n                                                                            \"kind\": \"functionCall\",\n                                                                            \"lValueRequested\": false,\n                                                                            \"names\": [],\n                                                                            \"nodeType\": \"FunctionCall\",\n                                                                            \"src\": \"13005:41:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                \"typeString\": \"uint256\"\n                                                                            }\n                                                                        }\n                                                                    ],\n                                                                    \"expression\": {\n                                                                        \"argumentTypes\": [\n                                                                            {\n                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                \"typeString\": \"uint256\"\n                                                                            }\n                                                                        ],\n                                                                        \"expression\": {\n                                                                            \"argumentTypes\": null,\n                                                                            \"id\": 1129,\n                                                                            \"name\": \"totalPayout\",\n                                                                            \"nodeType\": \"Identifier\",\n                                                                            \"overloadedDeclarations\": [],\n                                                                            \"referencedDeclaration\": 1027,\n                                                                            \"src\": \"12989:11:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_uint256\",\n                                                                                \"typeString\": \"uint256\"\n                                                                            }\n                                                                        },\n                                                                        \"id\": 1130,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": false,\n                                                                        \"lValueRequested\": false,\n                                                                        \"memberName\": \"add\",\n                                                                        \"nodeType\": \"MemberAccess\",\n                                                                        \"referencedDeclaration\": 2262,\n                                                                        \"src\": \"12989:15:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                                                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                                                        }\n                                                                    },\n                                                                    \"id\": 1138,\n                                                                    \"isConstant\": false,\n                                                                    \"isLValue\": false,\n                                                                    \"isPure\": false,\n                                                                    \"kind\": \"functionCall\",\n                                                                    \"lValueRequested\": false,\n                                                                    \"names\": [],\n                                                                    \"nodeType\": \"FunctionCall\",\n                                                                    \"src\": \"12989:58:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_uint256\",\n                                                                        \"typeString\": \"uint256\"\n                                                                    }\n                                                                },\n                                                                \"src\": \"12975:72:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                    \"typeString\": \"uint256\"\n                                                                }\n                                                            },\n                                                            \"id\": 1140,\n                                                            \"nodeType\": \"ExpressionStatement\",\n                                                            \"src\": \"12975:72:1\"\n                                                        },\n                                                        {\n                                                            \"expression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"arguments\": [\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"expression\": {\n                                                                            \"argumentTypes\": null,\n                                                                            \"id\": 1142,\n                                                                            \"name\": \"msg\",\n                                                                            \"nodeType\": \"Identifier\",\n                                                                            \"overloadedDeclarations\": [],\n                                                                            \"referencedDeclaration\": 2471,\n                                                                            \"src\": \"13071:3:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_magic_message\",\n                                                                                \"typeString\": \"msg\"\n                                                                            }\n                                                                        },\n                                                                        \"id\": 1143,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": false,\n                                                                        \"lValueRequested\": false,\n                                                                        \"memberName\": \"sender\",\n                                                                        \"nodeType\": \"MemberAccess\",\n                                                                        \"referencedDeclaration\": null,\n                                                                        \"src\": \"13071:10:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_address_payable\",\n                                                                            \"typeString\": \"address payable\"\n                                                                        }\n                                                                    },\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"id\": 1144,\n                                                                        \"name\": \"positionId\",\n                                                                        \"nodeType\": \"Identifier\",\n                                                                        \"overloadedDeclarations\": [],\n                                                                        \"referencedDeclaration\": 1068,\n                                                                        \"src\": \"13083:10:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    },\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"id\": 1145,\n                                                                        \"name\": \"payoutStake\",\n                                                                        \"nodeType\": \"Identifier\",\n                                                                        \"overloadedDeclarations\": [],\n                                                                        \"referencedDeclaration\": 1118,\n                                                                        \"src\": \"13095:11:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    }\n                                                                ],\n                                                                \"expression\": {\n                                                                    \"argumentTypes\": [\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_address_payable\",\n                                                                            \"typeString\": \"address payable\"\n                                                                        },\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        },\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    ],\n                                                                    \"id\": 1141,\n                                                                    \"name\": \"_burn\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 1873,\n                                                                    \"src\": \"13065:5:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$\",\n                                                                        \"typeString\": \"function (address,uint256,uint256)\"\n                                                                    }\n                                                                },\n                                                                \"id\": 1146,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"kind\": \"functionCall\",\n                                                                \"lValueRequested\": false,\n                                                                \"names\": [],\n                                                                \"nodeType\": \"FunctionCall\",\n                                                                \"src\": \"13065:42:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_tuple$__$\",\n                                                                    \"typeString\": \"tuple()\"\n                                                                }\n                                                            },\n                                                            \"id\": 1147,\n                                                            \"nodeType\": \"ExpressionStatement\",\n                                                            \"src\": \"13065:42:1\"\n                                                        }\n                                                    ]\n                                                }\n                                            }\n                                        ]\n                                    },\n                                    \"condition\": {\n                                        \"argumentTypes\": null,\n                                        \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        },\n                                        \"id\": 1046,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"leftExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"id\": 1043,\n                                            \"name\": \"i\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 1040,\n                                            \"src\": \"12271:1:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"nodeType\": \"BinaryOperation\",\n                                        \"operator\": \"<\",\n                                        \"rightExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"expression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1044,\n                                                \"name\": \"indexSets\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 996,\n                                                \"src\": \"12275:9:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                    \"typeString\": \"uint256[] calldata\"\n                                                }\n                                            },\n                                            \"id\": 1045,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"memberName\": \"length\",\n                                            \"nodeType\": \"MemberAccess\",\n                                            \"referencedDeclaration\": null,\n                                            \"src\": \"12275:16:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"src\": \"12271:20:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bool\",\n                                            \"typeString\": \"bool\"\n                                        }\n                                    },\n                                    \"id\": 1151,\n                                    \"initializationExpression\": {\n                                        \"assignments\": [1040],\n                                        \"declarations\": [\n                                            {\n                                                \"constant\": false,\n                                                \"id\": 1040,\n                                                \"name\": \"i\",\n                                                \"nodeType\": \"VariableDeclaration\",\n                                                \"scope\": 1151,\n                                                \"src\": \"12259:6:1\",\n                                                \"stateVariable\": false,\n                                                \"storageLocation\": \"default\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                },\n                                                \"typeName\": {\n                                                    \"id\": 1039,\n                                                    \"name\": \"uint\",\n                                                    \"nodeType\": \"ElementaryTypeName\",\n                                                    \"src\": \"12259:4:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                    }\n                                                },\n                                                \"value\": null,\n                                                \"visibility\": \"internal\"\n                                            }\n                                        ],\n                                        \"id\": 1042,\n                                        \"initialValue\": {\n                                            \"argumentTypes\": null,\n                                            \"hexValue\": \"30\",\n                                            \"id\": 1041,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": true,\n                                            \"kind\": \"number\",\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"Literal\",\n                                            \"src\": \"12268:1:1\",\n                                            \"subdenomination\": null,\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                \"typeString\": \"int_const 0\"\n                                            },\n                                            \"value\": \"0\"\n                                        },\n                                        \"nodeType\": \"VariableDeclarationStatement\",\n                                        \"src\": \"12259:10:1\"\n                                    },\n                                    \"loopExpression\": {\n                                        \"expression\": {\n                                            \"argumentTypes\": null,\n                                            \"id\": 1048,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"UnaryOperation\",\n                                            \"operator\": \"++\",\n                                            \"prefix\": false,\n                                            \"src\": \"12293:3:1\",\n                                            \"subExpression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1047,\n                                                \"name\": \"i\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 1040,\n                                                \"src\": \"12293:1:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            },\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"id\": 1049,\n                                        \"nodeType\": \"ExpressionStatement\",\n                                        \"src\": \"12293:3:1\"\n                                    },\n                                    \"nodeType\": \"ForStatement\",\n                                    \"src\": \"12254:878:1\"\n                                },\n                                {\n                                    \"condition\": {\n                                        \"argumentTypes\": null,\n                                        \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        },\n                                        \"id\": 1154,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"leftExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"id\": 1152,\n                                            \"name\": \"totalPayout\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 1027,\n                                            \"src\": \"13146:11:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"nodeType\": \"BinaryOperation\",\n                                        \"operator\": \">\",\n                                        \"rightExpression\": {\n                                            \"argumentTypes\": null,\n                                            \"hexValue\": \"30\",\n                                            \"id\": 1153,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": true,\n                                            \"kind\": \"number\",\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"Literal\",\n                                            \"src\": \"13160:1:1\",\n                                            \"subdenomination\": null,\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                \"typeString\": \"int_const 0\"\n                                            },\n                                            \"value\": \"0\"\n                                        },\n                                        \"src\": \"13146:15:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bool\",\n                                            \"typeString\": \"bool\"\n                                        }\n                                    },\n                                    \"falseBody\": null,\n                                    \"id\": 1186,\n                                    \"nodeType\": \"IfStatement\",\n                                    \"src\": \"13142:356:1\",\n                                    \"trueBody\": {\n                                        \"id\": 1185,\n                                        \"nodeType\": \"Block\",\n                                        \"src\": \"13163:335:1\",\n                                        \"statements\": [\n                                            {\n                                                \"condition\": {\n                                                    \"argumentTypes\": null,\n                                                    \"commonType\": {\n                                                        \"typeIdentifier\": \"t_bytes32\",\n                                                        \"typeString\": \"bytes32\"\n                                                    },\n                                                    \"id\": 1159,\n                                                    \"isConstant\": false,\n                                                    \"isLValue\": false,\n                                                    \"isPure\": false,\n                                                    \"lValueRequested\": false,\n                                                    \"leftExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"id\": 1155,\n                                                        \"name\": \"parentCollectionId\",\n                                                        \"nodeType\": \"Identifier\",\n                                                        \"overloadedDeclarations\": [],\n                                                        \"referencedDeclaration\": 991,\n                                                        \"src\": \"13181:18:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_bytes32\",\n                                                            \"typeString\": \"bytes32\"\n                                                        }\n                                                    },\n                                                    \"nodeType\": \"BinaryOperation\",\n                                                    \"operator\": \"==\",\n                                                    \"rightExpression\": {\n                                                        \"argumentTypes\": null,\n                                                        \"arguments\": [\n                                                            {\n                                                                \"argumentTypes\": null,\n                                                                \"hexValue\": \"30\",\n                                                                \"id\": 1157,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": true,\n                                                                \"kind\": \"number\",\n                                                                \"lValueRequested\": false,\n                                                                \"nodeType\": \"Literal\",\n                                                                \"src\": \"13211:1:1\",\n                                                                \"subdenomination\": null,\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                                    \"typeString\": \"int_const 0\"\n                                                                },\n                                                                \"value\": \"0\"\n                                                            }\n                                                        ],\n                                                        \"expression\": {\n                                                            \"argumentTypes\": [\n                                                                {\n                                                                    \"typeIdentifier\": \"t_rational_0_by_1\",\n                                                                    \"typeString\": \"int_const 0\"\n                                                                }\n                                                            ],\n                                                            \"id\": 1156,\n                                                            \"isConstant\": false,\n                                                            \"isLValue\": false,\n                                                            \"isPure\": true,\n                                                            \"lValueRequested\": false,\n                                                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                                                            \"src\": \"13203:7:1\",\n                                                            \"typeDescriptions\": {\n                                                                \"typeIdentifier\": \"t_type$_t_bytes32_$\",\n                                                                \"typeString\": \"type(bytes32)\"\n                                                            },\n                                                            \"typeName\": \"bytes32\"\n                                                        },\n                                                        \"id\": 1158,\n                                                        \"isConstant\": false,\n                                                        \"isLValue\": false,\n                                                        \"isPure\": true,\n                                                        \"kind\": \"typeConversion\",\n                                                        \"lValueRequested\": false,\n                                                        \"names\": [],\n                                                        \"nodeType\": \"FunctionCall\",\n                                                        \"src\": \"13203:10:1\",\n                                                        \"typeDescriptions\": {\n                                                            \"typeIdentifier\": \"t_bytes32\",\n                                                            \"typeString\": \"bytes32\"\n                                                        }\n                                                    },\n                                                    \"src\": \"13181:32:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_bool\",\n                                                        \"typeString\": \"bool\"\n                                                    }\n                                                },\n                                                \"falseBody\": {\n                                                    \"id\": 1183,\n                                                    \"nodeType\": \"Block\",\n                                                    \"src\": \"13359:129:1\",\n                                                    \"statements\": [\n                                                        {\n                                                            \"expression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"arguments\": [\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"expression\": {\n                                                                            \"argumentTypes\": null,\n                                                                            \"id\": 1172,\n                                                                            \"name\": \"msg\",\n                                                                            \"nodeType\": \"Identifier\",\n                                                                            \"overloadedDeclarations\": [],\n                                                                            \"referencedDeclaration\": 2471,\n                                                                            \"src\": \"13383:3:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_magic_message\",\n                                                                                \"typeString\": \"msg\"\n                                                                            }\n                                                                        },\n                                                                        \"id\": 1173,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": false,\n                                                                        \"lValueRequested\": false,\n                                                                        \"memberName\": \"sender\",\n                                                                        \"nodeType\": \"MemberAccess\",\n                                                                        \"referencedDeclaration\": null,\n                                                                        \"src\": \"13383:10:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_address_payable\",\n                                                                            \"typeString\": \"address payable\"\n                                                                        }\n                                                                    },\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"arguments\": [\n                                                                            {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 1176,\n                                                                                \"name\": \"collateralToken\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 989,\n                                                                                \"src\": \"13419:15:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                                    \"typeString\": \"contract IERC20\"\n                                                                                }\n                                                                            },\n                                                                            {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 1177,\n                                                                                \"name\": \"parentCollectionId\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 991,\n                                                                                \"src\": \"13436:18:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                                                    \"typeString\": \"bytes32\"\n                                                                                }\n                                                                            }\n                                                                        ],\n                                                                        \"expression\": {\n                                                                            \"argumentTypes\": [\n                                                                                {\n                                                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                                    \"typeString\": \"contract IERC20\"\n                                                                                },\n                                                                                {\n                                                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                                                    \"typeString\": \"bytes32\"\n                                                                                }\n                                                                            ],\n                                                                            \"expression\": {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 1174,\n                                                                                \"name\": \"CTHelpers\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 298,\n                                                                                \"src\": \"13395:9:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                                                    \"typeString\": \"type(library CTHelpers)\"\n                                                                                }\n                                                                            },\n                                                                            \"id\": 1175,\n                                                                            \"isConstant\": false,\n                                                                            \"isLValue\": false,\n                                                                            \"isPure\": false,\n                                                                            \"lValueRequested\": false,\n                                                                            \"memberName\": \"getPositionId\",\n                                                                            \"nodeType\": \"MemberAccess\",\n                                                                            \"referencedDeclaration\": 297,\n                                                                            \"src\": \"13395:23:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_function_internal_pure$_t_contract$_IERC20_$2437_$_t_bytes32_$returns$_t_uint256_$\",\n                                                                                \"typeString\": \"function (contract IERC20,bytes32) pure returns (uint256)\"\n                                                                            }\n                                                                        },\n                                                                        \"id\": 1178,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": false,\n                                                                        \"kind\": \"functionCall\",\n                                                                        \"lValueRequested\": false,\n                                                                        \"names\": [],\n                                                                        \"nodeType\": \"FunctionCall\",\n                                                                        \"src\": \"13395:60:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    },\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"id\": 1179,\n                                                                        \"name\": \"totalPayout\",\n                                                                        \"nodeType\": \"Identifier\",\n                                                                        \"overloadedDeclarations\": [],\n                                                                        \"referencedDeclaration\": 1027,\n                                                                        \"src\": \"13457:11:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        }\n                                                                    },\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"hexValue\": \"\",\n                                                                        \"id\": 1180,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": true,\n                                                                        \"kind\": \"string\",\n                                                                        \"lValueRequested\": false,\n                                                                        \"nodeType\": \"Literal\",\n                                                                        \"src\": \"13470:2:1\",\n                                                                        \"subdenomination\": null,\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470\",\n                                                                            \"typeString\": \"literal_string \\\"\\\"\"\n                                                                        },\n                                                                        \"value\": \"\"\n                                                                    }\n                                                                ],\n                                                                \"expression\": {\n                                                                    \"argumentTypes\": [\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_address_payable\",\n                                                                            \"typeString\": \"address payable\"\n                                                                        },\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        },\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_uint256\",\n                                                                            \"typeString\": \"uint256\"\n                                                                        },\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470\",\n                                                                            \"typeString\": \"literal_string \\\"\\\"\"\n                                                                        }\n                                                                    ],\n                                                                    \"id\": 1171,\n                                                                    \"name\": \"_mint\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [],\n                                                                    \"referencedDeclaration\": 1748,\n                                                                    \"src\": \"13377:5:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$\",\n                                                                        \"typeString\": \"function (address,uint256,uint256,bytes memory)\"\n                                                                    }\n                                                                },\n                                                                \"id\": 1181,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"kind\": \"functionCall\",\n                                                                \"lValueRequested\": false,\n                                                                \"names\": [],\n                                                                \"nodeType\": \"FunctionCall\",\n                                                                \"src\": \"13377:96:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_tuple$__$\",\n                                                                    \"typeString\": \"tuple()\"\n                                                                }\n                                                            },\n                                                            \"id\": 1182,\n                                                            \"nodeType\": \"ExpressionStatement\",\n                                                            \"src\": \"13377:96:1\"\n                                                        }\n                                                    ]\n                                                },\n                                                \"id\": 1184,\n                                                \"nodeType\": \"IfStatement\",\n                                                \"src\": \"13177:311:1\",\n                                                \"trueBody\": {\n                                                    \"id\": 1170,\n                                                    \"nodeType\": \"Block\",\n                                                    \"src\": \"13215:138:1\",\n                                                    \"statements\": [\n                                                        {\n                                                            \"expression\": {\n                                                                \"argumentTypes\": null,\n                                                                \"arguments\": [\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"arguments\": [\n                                                                            {\n                                                                                \"argumentTypes\": null,\n                                                                                \"expression\": {\n                                                                                    \"argumentTypes\": null,\n                                                                                    \"id\": 1163,\n                                                                                    \"name\": \"msg\",\n                                                                                    \"nodeType\": \"Identifier\",\n                                                                                    \"overloadedDeclarations\": [],\n                                                                                    \"referencedDeclaration\": 2471,\n                                                                                    \"src\": \"13266:3:1\",\n                                                                                    \"typeDescriptions\": {\n                                                                                        \"typeIdentifier\": \"t_magic_message\",\n                                                                                        \"typeString\": \"msg\"\n                                                                                    }\n                                                                                },\n                                                                                \"id\": 1164,\n                                                                                \"isConstant\": false,\n                                                                                \"isLValue\": false,\n                                                                                \"isPure\": false,\n                                                                                \"lValueRequested\": false,\n                                                                                \"memberName\": \"sender\",\n                                                                                \"nodeType\": \"MemberAccess\",\n                                                                                \"referencedDeclaration\": null,\n                                                                                \"src\": \"13266:10:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                                                    \"typeString\": \"address payable\"\n                                                                                }\n                                                                            },\n                                                                            {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 1165,\n                                                                                \"name\": \"totalPayout\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 1027,\n                                                                                \"src\": \"13278:11:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                                    \"typeString\": \"uint256\"\n                                                                                }\n                                                                            }\n                                                                        ],\n                                                                        \"expression\": {\n                                                                            \"argumentTypes\": [\n                                                                                {\n                                                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                                                    \"typeString\": \"address payable\"\n                                                                                },\n                                                                                {\n                                                                                    \"typeIdentifier\": \"t_uint256\",\n                                                                                    \"typeString\": \"uint256\"\n                                                                                }\n                                                                            ],\n                                                                            \"expression\": {\n                                                                                \"argumentTypes\": null,\n                                                                                \"id\": 1161,\n                                                                                \"name\": \"collateralToken\",\n                                                                                \"nodeType\": \"Identifier\",\n                                                                                \"overloadedDeclarations\": [],\n                                                                                \"referencedDeclaration\": 989,\n                                                                                \"src\": \"13241:15:1\",\n                                                                                \"typeDescriptions\": {\n                                                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                                                    \"typeString\": \"contract IERC20\"\n                                                                                }\n                                                                            },\n                                                                            \"id\": 1162,\n                                                                            \"isConstant\": false,\n                                                                            \"isLValue\": false,\n                                                                            \"isPure\": false,\n                                                                            \"lValueRequested\": false,\n                                                                            \"memberName\": \"transfer\",\n                                                                            \"nodeType\": \"MemberAccess\",\n                                                                            \"referencedDeclaration\": 2391,\n                                                                            \"src\": \"13241:24:1\",\n                                                                            \"typeDescriptions\": {\n                                                                                \"typeIdentifier\": \"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$\",\n                                                                                \"typeString\": \"function (address,uint256) external returns (bool)\"\n                                                                            }\n                                                                        },\n                                                                        \"id\": 1166,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": false,\n                                                                        \"kind\": \"functionCall\",\n                                                                        \"lValueRequested\": false,\n                                                                        \"names\": [],\n                                                                        \"nodeType\": \"FunctionCall\",\n                                                                        \"src\": \"13241:49:1\",\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_bool\",\n                                                                            \"typeString\": \"bool\"\n                                                                        }\n                                                                    },\n                                                                    {\n                                                                        \"argumentTypes\": null,\n                                                                        \"hexValue\": \"636f756c64206e6f74207472616e73666572207061796f757420746f206d6573736167652073656e646572\",\n                                                                        \"id\": 1167,\n                                                                        \"isConstant\": false,\n                                                                        \"isLValue\": false,\n                                                                        \"isPure\": true,\n                                                                        \"kind\": \"string\",\n                                                                        \"lValueRequested\": false,\n                                                                        \"nodeType\": \"Literal\",\n                                                                        \"src\": \"13292:45:1\",\n                                                                        \"subdenomination\": null,\n                                                                        \"typeDescriptions\": {\n                                                                            \"typeIdentifier\": \"t_stringliteral_210eeaafba043db52b30d6e4d8afdedff22365482b862fdf81bd2fbee3646893\",\n                                                                            \"typeString\": \"literal_string \\\"could not transfer payout to message sender\\\"\"\n                                                                        },\n                                                                        \"value\": \"could not transfer payout to message sender\"\n                                                                    }\n                                                                ],\n                                                                \"expression\": {\n                                                                    \"argumentTypes\": [\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_bool\",\n                                                                            \"typeString\": \"bool\"\n                                                                        },\n                                                                        {\n                                                                            \"typeIdentifier\": \"t_stringliteral_210eeaafba043db52b30d6e4d8afdedff22365482b862fdf81bd2fbee3646893\",\n                                                                            \"typeString\": \"literal_string \\\"could not transfer payout to message sender\\\"\"\n                                                                        }\n                                                                    ],\n                                                                    \"id\": 1160,\n                                                                    \"name\": \"require\",\n                                                                    \"nodeType\": \"Identifier\",\n                                                                    \"overloadedDeclarations\": [2474, 2475],\n                                                                    \"referencedDeclaration\": 2475,\n                                                                    \"src\": \"13233:7:1\",\n                                                                    \"typeDescriptions\": {\n                                                                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                                                        \"typeString\": \"function (bool,string memory) pure\"\n                                                                    }\n                                                                },\n                                                                \"id\": 1168,\n                                                                \"isConstant\": false,\n                                                                \"isLValue\": false,\n                                                                \"isPure\": false,\n                                                                \"kind\": \"functionCall\",\n                                                                \"lValueRequested\": false,\n                                                                \"names\": [],\n                                                                \"nodeType\": \"FunctionCall\",\n                                                                \"src\": \"13233:105:1\",\n                                                                \"typeDescriptions\": {\n                                                                    \"typeIdentifier\": \"t_tuple$__$\",\n                                                                    \"typeString\": \"tuple()\"\n                                                                }\n                                                            },\n                                                            \"id\": 1169,\n                                                            \"nodeType\": \"ExpressionStatement\",\n                                                            \"src\": \"13233:105:1\"\n                                                        }\n                                                    ]\n                                                }\n                                            }\n                                        ]\n                                    }\n                                },\n                                {\n                                    \"eventCall\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"expression\": {\n                                                    \"argumentTypes\": null,\n                                                    \"id\": 1188,\n                                                    \"name\": \"msg\",\n                                                    \"nodeType\": \"Identifier\",\n                                                    \"overloadedDeclarations\": [],\n                                                    \"referencedDeclaration\": 2471,\n                                                    \"src\": \"13529:3:1\",\n                                                    \"typeDescriptions\": {\n                                                        \"typeIdentifier\": \"t_magic_message\",\n                                                        \"typeString\": \"msg\"\n                                                    }\n                                                },\n                                                \"id\": 1189,\n                                                \"isConstant\": false,\n                                                \"isLValue\": false,\n                                                \"isPure\": false,\n                                                \"lValueRequested\": false,\n                                                \"memberName\": \"sender\",\n                                                \"nodeType\": \"MemberAccess\",\n                                                \"referencedDeclaration\": null,\n                                                \"src\": \"13529:10:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                    \"typeString\": \"address payable\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1190,\n                                                \"name\": \"collateralToken\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 989,\n                                                \"src\": \"13541:15:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                    \"typeString\": \"contract IERC20\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1191,\n                                                \"name\": \"parentCollectionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 991,\n                                                \"src\": \"13558:18:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1192,\n                                                \"name\": \"conditionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 993,\n                                                \"src\": \"13578:11:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1193,\n                                                \"name\": \"indexSets\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 996,\n                                                \"src\": \"13591:9:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                    \"typeString\": \"uint256[] calldata\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1194,\n                                                \"name\": \"totalPayout\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 1027,\n                                                \"src\": \"13602:11:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_address_payable\",\n                                                    \"typeString\": \"address payable\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                    \"typeString\": \"contract IERC20\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                                    \"typeString\": \"uint256[] calldata\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            ],\n                                            \"id\": 1187,\n                                            \"name\": \"PayoutRedemption\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 376,\n                                            \"src\": \"13512:16:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$2437_$_t_bytes32_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$__$\",\n                                                \"typeString\": \"function (address,contract IERC20,bytes32,bytes32,uint256[] memory,uint256)\"\n                                            }\n                                        },\n                                        \"id\": 1195,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"13512:102:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_tuple$__$\",\n                                            \"typeString\": \"tuple()\"\n                                        }\n                                    },\n                                    \"id\": 1196,\n                                    \"nodeType\": \"EmitStatement\",\n                                    \"src\": \"13507:107:1\"\n                                }\n                            ]\n                        },\n                        \"documentation\": null,\n                        \"implemented\": true,\n                        \"kind\": \"function\",\n                        \"modifiers\": [],\n                        \"name\": \"redeemPositions\",\n                        \"parameters\": {\n                            \"id\": 997,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 989,\n                                    \"name\": \"collateralToken\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 1198,\n                                    \"src\": \"11789:22:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                        \"typeString\": \"contract IERC20\"\n                                    },\n                                    \"typeName\": {\n                                        \"contractScope\": null,\n                                        \"id\": 988,\n                                        \"name\": \"IERC20\",\n                                        \"nodeType\": \"UserDefinedTypeName\",\n                                        \"referencedDeclaration\": 2437,\n                                        \"src\": \"11789:6:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                            \"typeString\": \"contract IERC20\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 991,\n                                    \"name\": \"parentCollectionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 1198,\n                                    \"src\": \"11813:26:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 990,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"11813:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 993,\n                                    \"name\": \"conditionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 1198,\n                                    \"src\": \"11841:19:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 992,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"11841:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 996,\n                                    \"name\": \"indexSets\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 1198,\n                                    \"src\": \"11862:25:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"calldata\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_calldata_ptr\",\n                                        \"typeString\": \"uint256[]\"\n                                    },\n                                    \"typeName\": {\n                                        \"baseType\": {\n                                            \"id\": 994,\n                                            \"name\": \"uint\",\n                                            \"nodeType\": \"ElementaryTypeName\",\n                                            \"src\": \"11862:4:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                            }\n                                        },\n                                        \"id\": 995,\n                                        \"length\": null,\n                                        \"nodeType\": \"ArrayTypeName\",\n                                        \"src\": \"11862:6:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                                            \"typeString\": \"uint256[]\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"11788:100:1\"\n                        },\n                        \"returnParameters\": {\n                            \"id\": 998,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [],\n                            \"src\": \"11898:0:1\"\n                        },\n                        \"scope\": 1266,\n                        \"stateMutability\": \"nonpayable\",\n                        \"superFunction\": null,\n                        \"visibility\": \"external\"\n                    },\n                    {\n                        \"id\": 1211,\n                        \"nodeType\": \"FunctionDefinition\",\n                        \"src\": \"13849:139:1\",\n                        \"body\": {\n                            \"id\": 1210,\n                            \"nodeType\": \"Block\",\n                            \"src\": \"13928:60:1\",\n                            \"statements\": [\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"expression\": {\n                                            \"argumentTypes\": null,\n                                            \"baseExpression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1205,\n                                                \"name\": \"payoutNumerators\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 381,\n                                                \"src\": \"13945:16:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_mapping$_t_bytes32_$_t_array$_t_uint256_$dyn_storage_$\",\n                                                    \"typeString\": \"mapping(bytes32 => uint256[] storage ref)\"\n                                                }\n                                            },\n                                            \"id\": 1207,\n                                            \"indexExpression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1206,\n                                                \"name\": \"conditionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 1200,\n                                                \"src\": \"13962:11:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            \"isConstant\": false,\n                                            \"isLValue\": true,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"nodeType\": \"IndexAccess\",\n                                            \"src\": \"13945:29:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage\",\n                                                \"typeString\": \"uint256[] storage ref\"\n                                            }\n                                        },\n                                        \"id\": 1208,\n                                        \"isConstant\": false,\n                                        \"isLValue\": true,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"memberName\": \"length\",\n                                        \"nodeType\": \"MemberAccess\",\n                                        \"referencedDeclaration\": null,\n                                        \"src\": \"13945:36:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"functionReturnParameters\": 1204,\n                                    \"id\": 1209,\n                                    \"nodeType\": \"Return\",\n                                    \"src\": \"13938:43:1\"\n                                }\n                            ]\n                        },\n                        \"documentation\": \"@dev Gets the outcome slot count of a condition.\\n @param conditionId ID of the condition.\\n @return Number of outcome slots associated with a condition, or zero if condition has not been prepared yet.\",\n                        \"implemented\": true,\n                        \"kind\": \"function\",\n                        \"modifiers\": [],\n                        \"name\": \"getOutcomeSlotCount\",\n                        \"parameters\": {\n                            \"id\": 1201,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 1200,\n                                    \"name\": \"conditionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 1211,\n                                    \"src\": \"13878:19:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 1199,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"13878:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"13877:21:1\"\n                        },\n                        \"returnParameters\": {\n                            \"id\": 1204,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 1203,\n                                    \"name\": \"\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 1211,\n                                    \"src\": \"13922:4:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 1202,\n                                        \"name\": \"uint\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"13922:4:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"13921:6:1\"\n                        },\n                        \"scope\": 1266,\n                        \"stateMutability\": \"view\",\n                        \"superFunction\": null,\n                        \"visibility\": \"external\"\n                    },\n                    {\n                        \"id\": 1230,\n                        \"nodeType\": \"FunctionDefinition\",\n                        \"src\": \"14410:201:1\",\n                        \"body\": {\n                            \"id\": 1229,\n                            \"nodeType\": \"Block\",\n                            \"src\": \"14525:86:1\",\n                            \"statements\": [\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1224,\n                                                \"name\": \"oracle\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 1213,\n                                                \"src\": \"14567:6:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_address\",\n                                                    \"typeString\": \"address\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1225,\n                                                \"name\": \"questionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 1215,\n                                                \"src\": \"14575:10:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1226,\n                                                \"name\": \"outcomeSlotCount\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 1217,\n                                                \"src\": \"14587:16:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_address\",\n                                                    \"typeString\": \"address\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            ],\n                                            \"expression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1222,\n                                                \"name\": \"CTHelpers\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 298,\n                                                \"src\": \"14542:9:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                    \"typeString\": \"type(library CTHelpers)\"\n                                                }\n                                            },\n                                            \"id\": 1223,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"memberName\": \"getConditionId\",\n                                            \"nodeType\": \"MemberAccess\",\n                                            \"referencedDeclaration\": 24,\n                                            \"src\": \"14542:24:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_internal_pure$_t_address_$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$\",\n                                                \"typeString\": \"function (address,bytes32,uint256) pure returns (bytes32)\"\n                                            }\n                                        },\n                                        \"id\": 1227,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"14542:62:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"functionReturnParameters\": 1221,\n                                    \"id\": 1228,\n                                    \"nodeType\": \"Return\",\n                                    \"src\": \"14535:69:1\"\n                                }\n                            ]\n                        },\n                        \"documentation\": \"@dev Constructs a condition ID from an oracle, a question ID, and the outcome slot count for the question.\\n @param oracle The account assigned to report the result for the prepared condition.\\n @param questionId An identifier for the question to be answered by the oracle.\\n @param outcomeSlotCount The number of outcome slots which should be used for this condition. Must not exceed 256.\",\n                        \"implemented\": true,\n                        \"kind\": \"function\",\n                        \"modifiers\": [],\n                        \"name\": \"getConditionId\",\n                        \"parameters\": {\n                            \"id\": 1218,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 1213,\n                                    \"name\": \"oracle\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 1230,\n                                    \"src\": \"14434:14:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_address\",\n                                        \"typeString\": \"address\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 1212,\n                                        \"name\": \"address\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"14434:7:1\",\n                                        \"stateMutability\": \"nonpayable\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_address\",\n                                            \"typeString\": \"address\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 1215,\n                                    \"name\": \"questionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 1230,\n                                    \"src\": \"14450:18:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 1214,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"14450:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 1217,\n                                    \"name\": \"outcomeSlotCount\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 1230,\n                                    \"src\": \"14470:21:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 1216,\n                                        \"name\": \"uint\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"14470:4:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"14433:59:1\"\n                        },\n                        \"returnParameters\": {\n                            \"id\": 1221,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 1220,\n                                    \"name\": \"\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 1230,\n                                    \"src\": \"14516:7:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 1219,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"14516:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"14515:9:1\"\n                        },\n                        \"scope\": 1266,\n                        \"stateMutability\": \"pure\",\n                        \"superFunction\": null,\n                        \"visibility\": \"external\"\n                    },\n                    {\n                        \"id\": 1249,\n                        \"nodeType\": \"FunctionDefinition\",\n                        \"src\": \"15056:213:1\",\n                        \"body\": {\n                            \"id\": 1248,\n                            \"nodeType\": \"Block\",\n                            \"src\": \"15177:92:1\",\n                            \"statements\": [\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1243,\n                                                \"name\": \"parentCollectionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 1232,\n                                                \"src\": \"15220:18:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1244,\n                                                \"name\": \"conditionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 1234,\n                                                \"src\": \"15240:11:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1245,\n                                                \"name\": \"indexSet\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 1236,\n                                                \"src\": \"15253:8:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                }\n                                            ],\n                                            \"expression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1241,\n                                                \"name\": \"CTHelpers\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 298,\n                                                \"src\": \"15194:9:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                    \"typeString\": \"type(library CTHelpers)\"\n                                                }\n                                            },\n                                            \"id\": 1242,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"memberName\": \"getCollectionId\",\n                                            \"nodeType\": \"MemberAccess\",\n                                            \"referencedDeclaration\": 277,\n                                            \"src\": \"15194:25:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$\",\n                                                \"typeString\": \"function (bytes32,bytes32,uint256) view returns (bytes32)\"\n                                            }\n                                        },\n                                        \"id\": 1246,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"15194:68:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"functionReturnParameters\": 1240,\n                                    \"id\": 1247,\n                                    \"nodeType\": \"Return\",\n                                    \"src\": \"15187:75:1\"\n                                }\n                            ]\n                        },\n                        \"documentation\": \"@dev Constructs an outcome collection ID from a parent collection and an outcome collection.\\n @param parentCollectionId Collection ID of the parent outcome collection, or bytes32(0) if there's no parent.\\n @param conditionId Condition ID of the outcome collection to combine with the parent outcome collection.\\n @param indexSet Index set of the outcome collection to combine with the parent outcome collection.\",\n                        \"implemented\": true,\n                        \"kind\": \"function\",\n                        \"modifiers\": [],\n                        \"name\": \"getCollectionId\",\n                        \"parameters\": {\n                            \"id\": 1237,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 1232,\n                                    \"name\": \"parentCollectionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 1249,\n                                    \"src\": \"15081:26:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 1231,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"15081:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 1234,\n                                    \"name\": \"conditionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 1249,\n                                    \"src\": \"15109:19:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 1233,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"15109:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 1236,\n                                    \"name\": \"indexSet\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 1249,\n                                    \"src\": \"15130:13:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 1235,\n                                        \"name\": \"uint\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"15130:4:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"15080:64:1\"\n                        },\n                        \"returnParameters\": {\n                            \"id\": 1240,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 1239,\n                                    \"name\": \"\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 1249,\n                                    \"src\": \"15168:7:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 1238,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"15168:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"15167:9:1\"\n                        },\n                        \"scope\": 1266,\n                        \"stateMutability\": \"view\",\n                        \"superFunction\": null,\n                        \"visibility\": \"external\"\n                    },\n                    {\n                        \"id\": 1265,\n                        \"nodeType\": \"FunctionDefinition\",\n                        \"src\": \"15583:176:1\",\n                        \"body\": {\n                            \"id\": 1264,\n                            \"nodeType\": \"Block\",\n                            \"src\": \"15681:78:1\",\n                            \"statements\": [\n                                {\n                                    \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1260,\n                                                \"name\": \"collateralToken\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 1251,\n                                                \"src\": \"15722:15:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                    \"typeString\": \"contract IERC20\"\n                                                }\n                                            },\n                                            {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1261,\n                                                \"name\": \"collectionId\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 1253,\n                                                \"src\": \"15739:12:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            }\n                                        ],\n                                        \"expression\": {\n                                            \"argumentTypes\": [\n                                                {\n                                                    \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                                    \"typeString\": \"contract IERC20\"\n                                                },\n                                                {\n                                                    \"typeIdentifier\": \"t_bytes32\",\n                                                    \"typeString\": \"bytes32\"\n                                                }\n                                            ],\n                                            \"expression\": {\n                                                \"argumentTypes\": null,\n                                                \"id\": 1258,\n                                                \"name\": \"CTHelpers\",\n                                                \"nodeType\": \"Identifier\",\n                                                \"overloadedDeclarations\": [],\n                                                \"referencedDeclaration\": 298,\n                                                \"src\": \"15698:9:1\",\n                                                \"typeDescriptions\": {\n                                                    \"typeIdentifier\": \"t_type$_t_contract$_CTHelpers_$298_$\",\n                                                    \"typeString\": \"type(library CTHelpers)\"\n                                                }\n                                            },\n                                            \"id\": 1259,\n                                            \"isConstant\": false,\n                                            \"isLValue\": false,\n                                            \"isPure\": false,\n                                            \"lValueRequested\": false,\n                                            \"memberName\": \"getPositionId\",\n                                            \"nodeType\": \"MemberAccess\",\n                                            \"referencedDeclaration\": 297,\n                                            \"src\": \"15698:23:1\",\n                                            \"typeDescriptions\": {\n                                                \"typeIdentifier\": \"t_function_internal_pure$_t_contract$_IERC20_$2437_$_t_bytes32_$returns$_t_uint256_$\",\n                                                \"typeString\": \"function (contract IERC20,bytes32) pure returns (uint256)\"\n                                            }\n                                        },\n                                        \"id\": 1262,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"functionCall\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"15698:54:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"functionReturnParameters\": 1257,\n                                    \"id\": 1263,\n                                    \"nodeType\": \"Return\",\n                                    \"src\": \"15691:61:1\"\n                                }\n                            ]\n                        },\n                        \"documentation\": \"@dev Constructs a position ID from a collateral token and an outcome collection. These IDs are used as the ERC-1155 ID for this contract.\\n @param collateralToken Collateral token which backs the position.\\n @param collectionId ID of the outcome collection associated with this position.\",\n                        \"implemented\": true,\n                        \"kind\": \"function\",\n                        \"modifiers\": [],\n                        \"name\": \"getPositionId\",\n                        \"parameters\": {\n                            \"id\": 1254,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 1251,\n                                    \"name\": \"collateralToken\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 1265,\n                                    \"src\": \"15606:22:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                        \"typeString\": \"contract IERC20\"\n                                    },\n                                    \"typeName\": {\n                                        \"contractScope\": null,\n                                        \"id\": 1250,\n                                        \"name\": \"IERC20\",\n                                        \"nodeType\": \"UserDefinedTypeName\",\n                                        \"referencedDeclaration\": 2437,\n                                        \"src\": \"15606:6:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_contract$_IERC20_$2437\",\n                                            \"typeString\": \"contract IERC20\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                },\n                                {\n                                    \"constant\": false,\n                                    \"id\": 1253,\n                                    \"name\": \"collectionId\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 1265,\n                                    \"src\": \"15630:20:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bytes32\",\n                                        \"typeString\": \"bytes32\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 1252,\n                                        \"name\": \"bytes32\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"15630:7:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_bytes32\",\n                                            \"typeString\": \"bytes32\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"15605:46:1\"\n                        },\n                        \"returnParameters\": {\n                            \"id\": 1257,\n                            \"nodeType\": \"ParameterList\",\n                            \"parameters\": [\n                                {\n                                    \"constant\": false,\n                                    \"id\": 1256,\n                                    \"name\": \"\",\n                                    \"nodeType\": \"VariableDeclaration\",\n                                    \"scope\": 1265,\n                                    \"src\": \"15675:4:1\",\n                                    \"stateVariable\": false,\n                                    \"storageLocation\": \"default\",\n                                    \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                    },\n                                    \"typeName\": {\n                                        \"id\": 1255,\n                                        \"name\": \"uint\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"15675:4:1\",\n                                        \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                        }\n                                    },\n                                    \"value\": null,\n                                    \"visibility\": \"internal\"\n                                }\n                            ],\n                            \"src\": \"15674:6:1\"\n                        },\n                        \"scope\": 1266,\n                        \"stateMutability\": \"pure\",\n                        \"superFunction\": null,\n                        \"visibility\": \"external\"\n                    }\n                ],\n                \"baseContracts\": [\n                    {\n                        \"arguments\": null,\n                        \"baseName\": {\n                            \"contractScope\": null,\n                            \"id\": 307,\n                            \"name\": \"ERC1155\",\n                            \"nodeType\": \"UserDefinedTypeName\",\n                            \"referencedDeclaration\": 2024,\n                            \"src\": \"230:7:1\",\n                            \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_ERC1155_$2024\",\n                                \"typeString\": \"contract ERC1155\"\n                            }\n                        },\n                        \"id\": 308,\n                        \"nodeType\": \"InheritanceSpecifier\",\n                        \"src\": \"230:7:1\"\n                    }\n                ],\n                \"contractDependencies\": [2024, 2135, 2225, 2235],\n                \"contractKind\": \"contract\",\n                \"documentation\": null,\n                \"fullyImplemented\": true,\n                \"linearizedBaseContracts\": [1266, 2024, 2135, 2225, 2235],\n                \"name\": \"ConditionalTokens\",\n                \"scope\": 1267\n            }\n        ]\n    },\n    \"id\": 1\n}\n"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/137/deployExchange-1663954950.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": null,\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n        \"0x4D97DCd97eC945f40cF65F87097ACe5EA0476045\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x769bc17a26fd41ce24f934403c8492bdfac6c548\",\n        \"gas\": \"0x41072e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b5060405162003b6538038062003b658339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e051610100516101205161014051610160516101805161375e62000407600039600061079e01526000818161043401528181611e9a0152818161206e01528181612a8e0152612b9901526000818161055701528181611e0b0152818161202301528181612abd0152612bc801526000611ac901526000611b1801526000611af301526000611a4c01526000611a7601526000611aa0015261375e6000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80637048027511610182578063d798eff6116100e9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610799578063fa950b48146107c0578063fbddd751146107d3578063fe729aaf146107e657600080fd5b8063e60f0c0514610754578063edef7d8e14610767578063f23a6e611461077a57600080fd5b8063d798eff6146106dd578063d7fb272f146106f0578063d82da83814610713578063e03ac3d014610726578063e2eec4051461072e578063e50e4f971461074157600080fd5b8063a287bdf11161013b578063a287bdf114610654578063a6dfcf8614610667578063ac8a584a1461067a578063b28c51c01461068d578063bc197c811461069e578063c10f1a75146106ca57600080fd5b806370480275146105e257806375d7370a146105f55780637ecebe001461060657806383b8a5ae146106265780639870d7fe1461062e578063a10f3dce1461064157600080fd5b8063429b62e5116102415780635893253c116101fa578063627cdcb9116101d4578063627cdcb914610588578063654f0ce41461059057806368c7450f146105a35780636d70f7ae146105b657600080fd5b80635893253c146105195780635c1548fb146105555780635c975abb1461057b57600080fd5b8063429b62e51461046057806344bea37e146104805780634544f05514610488578063456068d21461049b57806346423aa7146104a35780634a2a11f51461051157600080fd5b80631785f53c116102935780631785f53c1461039b57806324d7806c146103ae5780632dff692d146103db578063346009011461041f5780633b521d78146104325780633d6d35981461045857600080fd5b806301ffc9a7146102db5780630647ee201461030357806306b9d691146103305780631031e36e14610350578063131e7e1c1461035a57806313e7c9d81461036d575b600080fd5b6102ee6102e9366004612bec565b6107f9565b60405190151581526020015b60405180910390f35b6102ee610311366004612c3b565b6001600160a01b03919091166000908152600460205260409020541490565b610338610830565b6040516001600160a01b0390911681526020016102fa565b6103586108a3565b005b600754610338906001600160a01b031681565b61038d61037b366004612c67565b60026020526000908152604090205481565b6040519081526020016102fa565b6103586103a9366004612c67565b6108de565b6102ee6103bc366004612c67565b6001600160a01b03166000908152600160208190526040909120541490565b6104086103e9366004612c84565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016102fa565b61035861042d366004612c84565b610955565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b610358610986565b61038d61046e366004612c67565b60016020526000908152604090205481565b61038d600081565b610358610496366004612c67565b6109f1565b610358610a2b565b6104f46104b1366004612c84565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b6040805182511515815260209283015192810192909252016102fa565b6103e861038d565b610540610527366004612c84565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016102fa565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b6003546102ee9060ff1681565b610358610a64565b61035861059e366004612e84565b610a6e565b6103586105b1366004612eb8565b610a89565b6102ee6105c4366004612c67565b6001600160a01b031660009081526002602052604090205460011490565b6103586105f0366004612c67565b610aca565b6007546001600160a01b0316610338565b61038d610614366004612c67565b60046020526000908152604090205481565b610358610b44565b61035861063c366004612c67565b610bb0565b61038d61064f366004612c84565b610c28565b610338610662366004612c67565b610c46565b610358610675366004612e84565b610c65565b610358610688366004612c67565b610c6e565b6006546001600160a01b0316610338565b6106b16106ac366004612f72565b610ce5565b6040516001600160e01b031990911681526020016102fa565b600654610338906001600160a01b031681565b6103586106eb36600461309e565b610cf7565b61038d6106fe366004612c84565b60009081526005602052604090206001015490565b610358610721366004613101565b610d8f565b610338610db7565b61035861073c366004613123565b610e01565b61038d61074f366004612e84565b610e3d565b61035861076236600461315f565b610eda565b610338610775366004612c67565b610f6c565b6106b16107883660046131f0565b63f23a6e6160e01b95945050505050565b61038d7f000000000000000000000000000000000000000000000000000000000000000081565b6103586107ce366004613258565b610f8b565b6103586107e1366004612c67565b610fc2565b6103586107f436600461328c565b610ffc565b60006001600160e01b03198216630271189760e51b148061082a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546040805163557887a160e11b815290516000926001600160a01b03169163aaf10f429160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e91906132d0565b905090565b33600090815260016020819052604090912054146108d457604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611082565b565b336000908152600160208190526040909120541461090f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610983576040516307ed98ed60e31b815260040160405180910390fd5b50565b336000908152600260205260409020546001146109b657604051631f0853c160e21b815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610a2257604051637bfa4b9f60e01b815260040160405180910390fd5b610983816110bc565b3360009081526001602081905260409091205414610a5c57604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611118565b6108dc600161114f565b6000610a7982610e3d565b9050610a85818361117d565b5050565b3360009081526001602081905260409091205414610aba57604051637bfa4b9f60e01b815260040160405180910390fd5b610ac583838361126b565b505050565b3360009081526001602081905260409091205414610afb57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610b7557604051637bfa4b9f60e01b815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610be157604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610c3382610955565b5060009081526005602052604090205490565b600061082a82610c54610db7565b6007546001600160a01b0316611395565b610983816113f9565b3360009081526001602081905260409091205414610c9f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b63bc197c8160e01b5b95945050505050565b600054600203610d225760405162461bcd60e51b8152600401610d19906132ed565b60405180910390fd5b600260008181553381526020919091526040902054600114610d5757604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610d7b576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336114a1565b50506001600055565b80610d9983610c28565b14610a855760405163337c310560e11b815260040160405180910390fd5b6007546040805163530ca43760e11b815290516000926001600160a01b03169163a619486e9160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b610e2081604001518260200151848461018001518561016001516114fa565b610a8557604051638baa579f60e01b815260040160405180910390fd5b600061082a7fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e6101600151604051602001610ebf9d9c9b9a9998979695949392919061333b565b60405160208183030381529060405280519060200120611558565b600054600203610efc5760405162461bcd60e51b8152600401610d19906132ed565b600260008181553381526020919091526040902054600114610f3157604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610f55576040516313d0ff5960e31b815260040160405180910390fd5b610f61848484846115a6565b505060016000555050565b600061082a82610f7a610830565b6006546001600160a01b0316611747565b805160005b81811015610ac557610fba838281518110610fad57610fad6133cd565b60200260200101516113f9565b600101610f90565b3360009081526001602081905260409091205414610ff357604051637bfa4b9f60e01b815260040160405180910390fd5b61098381611796565b60005460020361101e5760405162461bcd60e51b8152600401610d19906132ed565b60026000818155338152602091909152604090205460011461105357604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615611077576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336117f2565b6003805460ff1916600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b6007546040516001600160a01b038084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6003805460ff1916905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b3360009081526004602052604090205461116a9082906133f9565b3360009081526004602052604090205550565b60008160e001511180156111945750428160e00151105b156111b2576040516362b439dd60e11b815260040160405180910390fd5b6111bc8282610e01565b6103e881610120015111156111e45760405163cd4e616760e01b815260040160405180910390fd5b6111f18160800151610955565b60008281526008602052604090205460ff161561122157604051633d9c5bb760e11b815260040160405180910390fd5b61124e81602001518261010001516001600160a01b03919091166000908152600460205260409020541490565b610a8557604051633ab3447f60e11b815260040160405180910390fd5b8183148061127f575082158061127f575081155b1561129d576040516307ed98ed60e31b815260040160405180910390fd5b6000838152600560205260409020541515806112c6575060008281526005602052604090205415155b156112e457604051630ea075bf60e21b815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b6000806113a184611905565b8051906020012090506000856040516020016113cc91906001600160a01b0391909116815260200190565b6040516020818303038152906040528051906020012090506113ef84838361196b565b9695505050505050565b60208101516001600160a01b03163314611426576040516330cd747160e01b815260040160405180910390fd5b600061143182610e3d565b600081815260086020526040902080549192509060ff161561146657604051633d9c5bb760e11b815260040160405180910390fd5b805460ff1916600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b818110156114f3576114eb8582815181106114c3576114c36133cd565b60200260200101518583815181106114dd576114dd6133cd565b6020026020010151856117f2565b6001016114a6565b5050505050565b60008082600281111561150f5761150f613311565b0361152757611520868686866119aa565b9050610cee565b600282600281111561153b5761153b613311565b0361154c57611520868686866119de565b61152086868686611a18565b600061082a611565611a3f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080806115b58885611b66565b9250925092506000806115c78a611bb6565b915091506115db8a60200151308489611bed565b6115e68a8a89611c17565b6115f08582611c69565b6101208b015190955060009061163290828d6101400151600181111561161857611618613311565b146116235788611625565b875b89898f6101400151611c98565b905061164f308c6020015184848a61164a9190613411565b611bed565b61165b30338484611d88565b60208b810151604080518681529283018590528201899052606082018790526080820183905230916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a46020808c0151604080518681529283018590528201899052606082018890526001600160a01b03169085907f63bf4d16b7fa898ef4c4b2b6d90fd201e9c56313b65638af6088d149d2ce956c9060800160405180910390a3600061172184611de4565b9050801561173957611739308d602001518684611bed565b505050505050505050505050565b6040516bffffffffffffffffffffffff19606085901b16602082015260009061178c908390859060340160405160208183030381529060405280519060200120611ec8565b90505b9392505050565b6006546040516001600160a01b038084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b81600080806118018785611b66565b925092509250600061185e8861012001516000600181111561182557611825613311565b8a6101400151600181111561183c5761183c613311565b146118475786611849565b855b8a60a001518b60c001518c6101400151611c98565b905060008061186c8a611bb6565b91509150611886338b6020015183868a61164a9190613411565b6118968a6020015189848a611bed565b60208a810151604080518581529283018490528201899052606082018790526080820185905233916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a450505050505050505050565b6060604051806101a0016040528061017181526020016135b86101719139604080516001600160a01b03851660208201520160408051601f19818403018152908290526119559291602001613454565b6040516020818303038152906040529050919050565b60008060ff60f81b8584866040516020016119899493929190613483565b60408051808303601f19018152919052805160209091012095945050505050565b6000836001600160a01b0316856001600160a01b03161480156119d357506119d3858484611f1d565b90505b949350505050565b60006119eb858484611f1d565b80156119d35750836001600160a01b0316611a0586610c46565b6001600160a01b03161495945050505050565b6000611a25858484611f1d565b80156119d35750836001600160a01b0316611a0586610f6c565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a9857507f000000000000000000000000000000000000000000000000000000000000000046145b15611ac257507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806000611b788560600151611f45565b611b8185610e3d565b9050611b8d818661117d565b611ba0848660a001518760c00151611f84565b9250611bad818686611fab565b91509250925092565b600080808361014001516001811115611bd157611bd1613311565b03611be157505060800151600091565b50506080015190600090565b81600003611c0557611c00848483612021565b611c11565b611c1184848484612069565b50505050565b815160005b818110156114f357611c6185858381518110611c3a57611c3a6133cd565b6020026020010151858481518110611c5457611c546133cd565b6020026020010151612096565b600101611c1c565b600080611c7583611de4565b90508381101561178f576040516301be9b0160e71b815260040160405180910390fd5b60008515610cee576000611cad85858561217c565b9050600081118015611cc75750670de0b6b3a76400008111155b15611d7e576000836001811115611ce057611ce0613311565b03611d3257611cf1612710826134bc565b86611d0d83611d0881670de0b6b3a7640000613411565b6121eb565b611d17908a6134bc565b611d2191906134bc565b611d2b91906134db565b9150611d7e565b611d46670de0b6b3a76400006127106134bc565b86611d5d83611d0881670de0b6b3a7640000613411565b611d67908a6134bc565b611d7191906134bc565b611d7b91906134db565b91505b5095945050505050565b8015611c1157611d9a84848484611bed565b60408051838152602081018390526001600160a01b038516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b600081600003611e77576040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015611e53573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082a91906134fd565b604051627eeac760e11b8152306004820152602481018390526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90604401611e36565b600080611ed58585612201565b805190602001209050600060ff60f81b868584604051602001611efb9493929190613483565b60408051808303601f1901815291905280516020909101209695505050505050565b6000836001600160a01b0316611f338484612318565b6001600160a01b031614949350505050565b6001600160a01b03811615801590611f6657506001600160a01b0381163314155b1561098357604051635211a07960e01b815260040160405180910390fd5b600082600003611f965750600061178f565b82611fa183866134bc565b61178c91906134db565b60008381526008602052604090206001810154908115611fcb5781611fd1565b8360a001515b915081831115611ff457604051637166356b60e11b815260040160405180910390fd5b611ffe8383613411565b91508160000361201457805460ff191660011781555b6001018190559392505050565b7f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b0385160361205d57611c0081848461233c565b611c1181858585612347565b611c117f000000000000000000000000000000000000000000000000000000000000000085858585612353565b60006120a284846123d9565b90506120af848483612475565b81600080806120be8785611b66565b92509250925060006120e28861012001516000600181111561182557611825613311565b90506000806120f08a611bb6565b9150915061210787878c6020015185858d896124ef565b6020808c01518b8201516040805186815293840185905283018a905260608301889052608083018690526001600160a01b039182169291169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a45050505050505050505050565b60008082600181111561219157612191613311565b036121c957826000036121a55760006121c2565b826121b8670de0b6b3a7640000866134bc565b6121c291906134db565b905061178f565b836000036121d857600061178c565b83611fa1670de0b6b3a7640000856134bc565b60008183106121fa578161178f565b5090919050565b60408051600080825260208201909252606091906122229060448101613516565b60408051601f19818403018152918152602080830180516001600160e01b03166352e831dd60e01b1790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe6020820152600160601b8502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be6041820152600160601b840260608201526e5af43d82803e903d91602b57fd5bf360881b607482015280826040516020016122ff929190613454565b6040516020818303038152906040529250505092915050565b60008060006123278585612556565b915091506123348161259b565b509392505050565b610ac58383836126e5565b611c118484848461275d565b604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b1580156123ba57600080fd5b505af11580156123ce573d6000803e3d6000fd5b505050505050505050565b60008083610140015160018111156123f3576123f3613311565b14801561241657506000826101400151600181111561241457612414613311565b145b156124235750600161082a565b6001836101400151600181111561243c5761243c613311565b14801561245f57506001826101400151600181111561245d5761245d613311565b145b1561246c5750600261082a565b50600092915050565b61247f83836127e0565b61249c57604051633fcd37a360e11b815260040160405180910390fd5b60008160028111156124b0576124b0613311565b036124dd578160800151836080015114610ac55760405163a0b9446560e01b815260040160405180910390fd5b610ac583608001518360800151610d8f565b6124fb8530868a611bed565b612508878786868661282a565b8561251284611de4565b1015612531576040516301be9b0160e71b815260040160405180910390fd5b61254130868561164a858b613411565b61254d30338584611d88565b50505050505050565b600080825160410361258c5760208301516040840151606085015160001a612580878285856128b2565b94509450505050612594565b506000905060025b9250929050565b60008160048111156125af576125af613311565b036125b75750565b60018160048111156125cb576125cb613311565b036126185760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610d19565b600281600481111561262c5761262c613311565b036126795760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610d19565b600381600481111561268d5761268d613311565b036109835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610d19565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611c115760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610d19565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806114f35760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610d19565b60008260c00151600014806127f7575060c0820151155b156128045750600161082a565b61178f61281084612976565b61281984612976565b856101400151856101400151612990565b600081600281111561283e5761283e613311565b146114f357600181600281111561285757612857613311565b0361287d576000828152600560205260409020600101546128789085612a2a565b6114f3565b600281600281111561289157612891613311565b036114f3576000838152600560205260409020600101546128789086612b35565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128e9575060009050600361296d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561293d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129665760006001925092505061296d565b9150600090505b94509492505050565b600061082a8260a001518360c0015184610140015161217c565b6000808360018111156129a5576129a5613311565b036129e95760008260018111156129be576129be613311565b036129df57670de0b6b3a76400006129d685876133f9565b101590506119d6565b50828410156119d6565b60008260018111156129fd576129fd613311565b03612a0c5750838310156119d6565b670de0b6b3a7640000612a1f85876133f9565b111595945050505050565b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612a6057612a606133cd565b602002602001018181525050600281600181518110612a8157612a816133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160e01b031960e084901b168152612b079190600090889087908990600401613549565b600060405180830381600087803b158015612b2157600080fd5b505af115801561254d573d6000803e3d6000fd5b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612b6b57612b6b6133cd565b602002602001018181525050600281600181518110612b8c57612b8c6133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e7212ad7f0000000000000000000000000000000000000000000000000000000000000000612add565b600060208284031215612bfe57600080fd5b81356001600160e01b03198116811461178f57600080fd5b6001600160a01b038116811461098357600080fd5b8035612c3681612c16565b919050565b60008060408385031215612c4e57600080fd5b8235612c5981612c16565b946020939093013593505050565b600060208284031215612c7957600080fd5b813561178f81612c16565b600060208284031215612c9657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b0381118282101715612cd657612cd6612c9d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612d0457612d04612c9d565b604052919050565b803560028110612c3657600080fd5b803560038110612c3657600080fd5b600082601f830112612d3b57600080fd5b81356001600160401b03811115612d5457612d54612c9d565b612d67601f8201601f1916602001612cdc565b818152846020838601011115612d7c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a08284031215612dac57600080fd5b612db4612cb3565b905081358152612dc660208301612c2b565b6020820152612dd760408301612c2b565b6040820152612de860608301612c2b565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140612e3b818401612d0c565b90820152610160612e4d838201612d1b565b90820152610180828101356001600160401b03811115612e6c57600080fd5b612e7885828601612d2a565b82840152505092915050565b600060208284031215612e9657600080fd5b81356001600160401b03811115612eac57600080fd5b6119d684828501612d99565b600080600060608486031215612ecd57600080fd5b505081359360208301359350604090920135919050565b60006001600160401b03821115612efd57612efd612c9d565b5060051b60200190565b600082601f830112612f1857600080fd5b81356020612f2d612f2883612ee4565b612cdc565b82815260059290921b84018101918181019086841115612f4c57600080fd5b8286015b84811015612f675780358352918301918301612f50565b509695505050505050565b600080600080600060a08688031215612f8a57600080fd5b8535612f9581612c16565b94506020860135612fa581612c16565b935060408601356001600160401b0380821115612fc157600080fd5b612fcd89838a01612f07565b94506060880135915080821115612fe357600080fd5b612fef89838a01612f07565b9350608088013591508082111561300557600080fd5b5061301288828901612d2a565b9150509295509295909350565b600082601f83011261303057600080fd5b81356020613040612f2883612ee4565b82815260059290921b8401810191818101908684111561305f57600080fd5b8286015b84811015612f675780356001600160401b038111156130825760008081fd5b6130908986838b0101612d99565b845250918301918301613063565b600080604083850312156130b157600080fd5b82356001600160401b03808211156130c857600080fd5b6130d48683870161301f565b935060208501359150808211156130ea57600080fd5b506130f785828601612f07565b9150509250929050565b6000806040838503121561311457600080fd5b50508035926020909101359150565b6000806040838503121561313657600080fd5b8235915060208301356001600160401b0381111561315357600080fd5b6130f785828601612d99565b6000806000806080858703121561317557600080fd5b84356001600160401b038082111561318c57600080fd5b61319888838901612d99565b955060208701359150808211156131ae57600080fd5b6131ba8883890161301f565b94506040870135935060608701359150808211156131d757600080fd5b506131e487828801612f07565b91505092959194509250565b600080600080600060a0868803121561320857600080fd5b853561321381612c16565b9450602086013561322381612c16565b9350604086013592506060860135915060808601356001600160401b0381111561324c57600080fd5b61301288828901612d2a565b60006020828403121561326a57600080fd5b81356001600160401b0381111561328057600080fd5b6119d68482850161301f565b6000806040838503121561329f57600080fd5b82356001600160401b038111156132b557600080fd5b6132c185828601612d99565b95602094909401359450505050565b6000602082840312156132e257600080fd5b815161178f81612c16565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b6003811061333757613337613311565b9052565b8d8152602081018d90526001600160a01b038c811660408301528b811660608301528a16608082015260a0810189905260c0810188905260e081018790526101008101869052610120810185905261014081018490526101a08101600284106133a6576133a6613311565b836101608301526133bb610180830184613327565b9e9d5050505050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561340c5761340c6133e3565b500190565b600082821015613423576134236133e3565b500390565b60005b8381101561344357818101518382015260200161342b565b83811115611c115750506000910152565b60008351613466818460208801613428565b83519083019061347a818360208801613428565b01949350505050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60008160001904831182151516156134d6576134d66133e3565b500290565b6000826134f857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561350f57600080fd5b5051919050565b6020815260008251806020840152613535816040850160208701613428565b601f01601f19169190910160400192915050565b6001600160a01b038616815260208082018690526040820185905260a06060830181905284519083018190526000918581019160c0850190845b8181101561359f57845183529383019391830191600101613583565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a2646970667358221220d93139e32bae530b273044d07d00326d19debeb5b49b08f172b04a7bc677797964736f6c634300080f00330000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa841740000000000000000000000004d97dcd97ec945f40cf65f87097ace5ea0476045000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x769bc17a26fd41ce24f934403c8492bdfac6c548\",\n        \"to\": \"0xbe9f464bc8673dc26ae4f8ed91156c75677762db\",\n        \"gas\": \"0x1107e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x769bc17a26fd41ce24f934403c8492bdfac6c548\",\n        \"to\": \"0xbe9f464bc8673dc26ae4f8ed91156c75677762db\",\n        \"gas\": \"0x110f1\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x769bc17a26fd41ce24f934403c8492bdfac6c548\",\n        \"to\": \"0xbe9f464bc8673dc26ae4f8ed91156c75677762db\",\n        \"gas\": \"0x7d3c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x769bc17a26fd41ce24f934403c8492bdfac6c548\",\n        \"to\": \"0xbe9f464bc8673dc26ae4f8ed91156c75677762db\",\n        \"gas\": \"0x84d2\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [],\n  \"libraries\": [],\n  \"pending\": [],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/137/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\"\n    }\n  },\n  \"timestamp\": 1663954950,\n  \"commit\": \"ec7c23f\"\n}"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/137/deployExchange-1663955866.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": null,\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n        \"0x4D97DCd97eC945f40cF65F87097ACe5EA0476045\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"gas\": \"0x41072e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b5060405162003b6538038062003b658339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e051610100516101205161014051610160516101805161375e62000407600039600061079e01526000818161043401528181611e9a0152818161206e01528181612a8e0152612b9901526000818161055701528181611e0b0152818161202301528181612abd0152612bc801526000611ac901526000611b1801526000611af301526000611a4c01526000611a7601526000611aa0015261375e6000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80637048027511610182578063d798eff6116100e9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610799578063fa950b48146107c0578063fbddd751146107d3578063fe729aaf146107e657600080fd5b8063e60f0c0514610754578063edef7d8e14610767578063f23a6e611461077a57600080fd5b8063d798eff6146106dd578063d7fb272f146106f0578063d82da83814610713578063e03ac3d014610726578063e2eec4051461072e578063e50e4f971461074157600080fd5b8063a287bdf11161013b578063a287bdf114610654578063a6dfcf8614610667578063ac8a584a1461067a578063b28c51c01461068d578063bc197c811461069e578063c10f1a75146106ca57600080fd5b806370480275146105e257806375d7370a146105f55780637ecebe001461060657806383b8a5ae146106265780639870d7fe1461062e578063a10f3dce1461064157600080fd5b8063429b62e5116102415780635893253c116101fa578063627cdcb9116101d4578063627cdcb914610588578063654f0ce41461059057806368c7450f146105a35780636d70f7ae146105b657600080fd5b80635893253c146105195780635c1548fb146105555780635c975abb1461057b57600080fd5b8063429b62e51461046057806344bea37e146104805780634544f05514610488578063456068d21461049b57806346423aa7146104a35780634a2a11f51461051157600080fd5b80631785f53c116102935780631785f53c1461039b57806324d7806c146103ae5780632dff692d146103db578063346009011461041f5780633b521d78146104325780633d6d35981461045857600080fd5b806301ffc9a7146102db5780630647ee201461030357806306b9d691146103305780631031e36e14610350578063131e7e1c1461035a57806313e7c9d81461036d575b600080fd5b6102ee6102e9366004612bec565b6107f9565b60405190151581526020015b60405180910390f35b6102ee610311366004612c3b565b6001600160a01b03919091166000908152600460205260409020541490565b610338610830565b6040516001600160a01b0390911681526020016102fa565b6103586108a3565b005b600754610338906001600160a01b031681565b61038d61037b366004612c67565b60026020526000908152604090205481565b6040519081526020016102fa565b6103586103a9366004612c67565b6108de565b6102ee6103bc366004612c67565b6001600160a01b03166000908152600160208190526040909120541490565b6104086103e9366004612c84565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016102fa565b61035861042d366004612c84565b610955565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b610358610986565b61038d61046e366004612c67565b60016020526000908152604090205481565b61038d600081565b610358610496366004612c67565b6109f1565b610358610a2b565b6104f46104b1366004612c84565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b6040805182511515815260209283015192810192909252016102fa565b6103e861038d565b610540610527366004612c84565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016102fa565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b6003546102ee9060ff1681565b610358610a64565b61035861059e366004612e84565b610a6e565b6103586105b1366004612eb8565b610a89565b6102ee6105c4366004612c67565b6001600160a01b031660009081526002602052604090205460011490565b6103586105f0366004612c67565b610aca565b6007546001600160a01b0316610338565b61038d610614366004612c67565b60046020526000908152604090205481565b610358610b44565b61035861063c366004612c67565b610bb0565b61038d61064f366004612c84565b610c28565b610338610662366004612c67565b610c46565b610358610675366004612e84565b610c65565b610358610688366004612c67565b610c6e565b6006546001600160a01b0316610338565b6106b16106ac366004612f72565b610ce5565b6040516001600160e01b031990911681526020016102fa565b600654610338906001600160a01b031681565b6103586106eb36600461309e565b610cf7565b61038d6106fe366004612c84565b60009081526005602052604090206001015490565b610358610721366004613101565b610d8f565b610338610db7565b61035861073c366004613123565b610e01565b61038d61074f366004612e84565b610e3d565b61035861076236600461315f565b610eda565b610338610775366004612c67565b610f6c565b6106b16107883660046131f0565b63f23a6e6160e01b95945050505050565b61038d7f000000000000000000000000000000000000000000000000000000000000000081565b6103586107ce366004613258565b610f8b565b6103586107e1366004612c67565b610fc2565b6103586107f436600461328c565b610ffc565b60006001600160e01b03198216630271189760e51b148061082a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546040805163557887a160e11b815290516000926001600160a01b03169163aaf10f429160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e91906132d0565b905090565b33600090815260016020819052604090912054146108d457604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611082565b565b336000908152600160208190526040909120541461090f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610983576040516307ed98ed60e31b815260040160405180910390fd5b50565b336000908152600260205260409020546001146109b657604051631f0853c160e21b815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610a2257604051637bfa4b9f60e01b815260040160405180910390fd5b610983816110bc565b3360009081526001602081905260409091205414610a5c57604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611118565b6108dc600161114f565b6000610a7982610e3d565b9050610a85818361117d565b5050565b3360009081526001602081905260409091205414610aba57604051637bfa4b9f60e01b815260040160405180910390fd5b610ac583838361126b565b505050565b3360009081526001602081905260409091205414610afb57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610b7557604051637bfa4b9f60e01b815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610be157604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610c3382610955565b5060009081526005602052604090205490565b600061082a82610c54610db7565b6007546001600160a01b0316611395565b610983816113f9565b3360009081526001602081905260409091205414610c9f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b63bc197c8160e01b5b95945050505050565b600054600203610d225760405162461bcd60e51b8152600401610d19906132ed565b60405180910390fd5b600260008181553381526020919091526040902054600114610d5757604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610d7b576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336114a1565b50506001600055565b80610d9983610c28565b14610a855760405163337c310560e11b815260040160405180910390fd5b6007546040805163530ca43760e11b815290516000926001600160a01b03169163a619486e9160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b610e2081604001518260200151848461018001518561016001516114fa565b610a8557604051638baa579f60e01b815260040160405180910390fd5b600061082a7fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e6101600151604051602001610ebf9d9c9b9a9998979695949392919061333b565b60405160208183030381529060405280519060200120611558565b600054600203610efc5760405162461bcd60e51b8152600401610d19906132ed565b600260008181553381526020919091526040902054600114610f3157604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610f55576040516313d0ff5960e31b815260040160405180910390fd5b610f61848484846115a6565b505060016000555050565b600061082a82610f7a610830565b6006546001600160a01b0316611747565b805160005b81811015610ac557610fba838281518110610fad57610fad6133cd565b60200260200101516113f9565b600101610f90565b3360009081526001602081905260409091205414610ff357604051637bfa4b9f60e01b815260040160405180910390fd5b61098381611796565b60005460020361101e5760405162461bcd60e51b8152600401610d19906132ed565b60026000818155338152602091909152604090205460011461105357604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615611077576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336117f2565b6003805460ff1916600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b6007546040516001600160a01b038084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6003805460ff1916905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b3360009081526004602052604090205461116a9082906133f9565b3360009081526004602052604090205550565b60008160e001511180156111945750428160e00151105b156111b2576040516362b439dd60e11b815260040160405180910390fd5b6111bc8282610e01565b6103e881610120015111156111e45760405163cd4e616760e01b815260040160405180910390fd5b6111f18160800151610955565b60008281526008602052604090205460ff161561122157604051633d9c5bb760e11b815260040160405180910390fd5b61124e81602001518261010001516001600160a01b03919091166000908152600460205260409020541490565b610a8557604051633ab3447f60e11b815260040160405180910390fd5b8183148061127f575082158061127f575081155b1561129d576040516307ed98ed60e31b815260040160405180910390fd5b6000838152600560205260409020541515806112c6575060008281526005602052604090205415155b156112e457604051630ea075bf60e21b815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b6000806113a184611905565b8051906020012090506000856040516020016113cc91906001600160a01b0391909116815260200190565b6040516020818303038152906040528051906020012090506113ef84838361196b565b9695505050505050565b60208101516001600160a01b03163314611426576040516330cd747160e01b815260040160405180910390fd5b600061143182610e3d565b600081815260086020526040902080549192509060ff161561146657604051633d9c5bb760e11b815260040160405180910390fd5b805460ff1916600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b818110156114f3576114eb8582815181106114c3576114c36133cd565b60200260200101518583815181106114dd576114dd6133cd565b6020026020010151856117f2565b6001016114a6565b5050505050565b60008082600281111561150f5761150f613311565b0361152757611520868686866119aa565b9050610cee565b600282600281111561153b5761153b613311565b0361154c57611520868686866119de565b61152086868686611a18565b600061082a611565611a3f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080806115b58885611b66565b9250925092506000806115c78a611bb6565b915091506115db8a60200151308489611bed565b6115e68a8a89611c17565b6115f08582611c69565b6101208b015190955060009061163290828d6101400151600181111561161857611618613311565b146116235788611625565b875b89898f6101400151611c98565b905061164f308c6020015184848a61164a9190613411565b611bed565b61165b30338484611d88565b60208b810151604080518681529283018590528201899052606082018790526080820183905230916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a46020808c0151604080518681529283018590528201899052606082018890526001600160a01b03169085907f63bf4d16b7fa898ef4c4b2b6d90fd201e9c56313b65638af6088d149d2ce956c9060800160405180910390a3600061172184611de4565b9050801561173957611739308d602001518684611bed565b505050505050505050505050565b6040516bffffffffffffffffffffffff19606085901b16602082015260009061178c908390859060340160405160208183030381529060405280519060200120611ec8565b90505b9392505050565b6006546040516001600160a01b038084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b81600080806118018785611b66565b925092509250600061185e8861012001516000600181111561182557611825613311565b8a6101400151600181111561183c5761183c613311565b146118475786611849565b855b8a60a001518b60c001518c6101400151611c98565b905060008061186c8a611bb6565b91509150611886338b6020015183868a61164a9190613411565b6118968a6020015189848a611bed565b60208a810151604080518581529283018490528201899052606082018790526080820185905233916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a450505050505050505050565b6060604051806101a0016040528061017181526020016135b86101719139604080516001600160a01b03851660208201520160408051601f19818403018152908290526119559291602001613454565b6040516020818303038152906040529050919050565b60008060ff60f81b8584866040516020016119899493929190613483565b60408051808303601f19018152919052805160209091012095945050505050565b6000836001600160a01b0316856001600160a01b03161480156119d357506119d3858484611f1d565b90505b949350505050565b60006119eb858484611f1d565b80156119d35750836001600160a01b0316611a0586610c46565b6001600160a01b03161495945050505050565b6000611a25858484611f1d565b80156119d35750836001600160a01b0316611a0586610f6c565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a9857507f000000000000000000000000000000000000000000000000000000000000000046145b15611ac257507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806000611b788560600151611f45565b611b8185610e3d565b9050611b8d818661117d565b611ba0848660a001518760c00151611f84565b9250611bad818686611fab565b91509250925092565b600080808361014001516001811115611bd157611bd1613311565b03611be157505060800151600091565b50506080015190600090565b81600003611c0557611c00848483612021565b611c11565b611c1184848484612069565b50505050565b815160005b818110156114f357611c6185858381518110611c3a57611c3a6133cd565b6020026020010151858481518110611c5457611c546133cd565b6020026020010151612096565b600101611c1c565b600080611c7583611de4565b90508381101561178f576040516301be9b0160e71b815260040160405180910390fd5b60008515610cee576000611cad85858561217c565b9050600081118015611cc75750670de0b6b3a76400008111155b15611d7e576000836001811115611ce057611ce0613311565b03611d3257611cf1612710826134bc565b86611d0d83611d0881670de0b6b3a7640000613411565b6121eb565b611d17908a6134bc565b611d2191906134bc565b611d2b91906134db565b9150611d7e565b611d46670de0b6b3a76400006127106134bc565b86611d5d83611d0881670de0b6b3a7640000613411565b611d67908a6134bc565b611d7191906134bc565b611d7b91906134db565b91505b5095945050505050565b8015611c1157611d9a84848484611bed565b60408051838152602081018390526001600160a01b038516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b600081600003611e77576040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015611e53573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082a91906134fd565b604051627eeac760e11b8152306004820152602481018390526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90604401611e36565b600080611ed58585612201565b805190602001209050600060ff60f81b868584604051602001611efb9493929190613483565b60408051808303601f1901815291905280516020909101209695505050505050565b6000836001600160a01b0316611f338484612318565b6001600160a01b031614949350505050565b6001600160a01b03811615801590611f6657506001600160a01b0381163314155b1561098357604051635211a07960e01b815260040160405180910390fd5b600082600003611f965750600061178f565b82611fa183866134bc565b61178c91906134db565b60008381526008602052604090206001810154908115611fcb5781611fd1565b8360a001515b915081831115611ff457604051637166356b60e11b815260040160405180910390fd5b611ffe8383613411565b91508160000361201457805460ff191660011781555b6001018190559392505050565b7f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b0385160361205d57611c0081848461233c565b611c1181858585612347565b611c117f000000000000000000000000000000000000000000000000000000000000000085858585612353565b60006120a284846123d9565b90506120af848483612475565b81600080806120be8785611b66565b92509250925060006120e28861012001516000600181111561182557611825613311565b90506000806120f08a611bb6565b9150915061210787878c6020015185858d896124ef565b6020808c01518b8201516040805186815293840185905283018a905260608301889052608083018690526001600160a01b039182169291169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a45050505050505050505050565b60008082600181111561219157612191613311565b036121c957826000036121a55760006121c2565b826121b8670de0b6b3a7640000866134bc565b6121c291906134db565b905061178f565b836000036121d857600061178c565b83611fa1670de0b6b3a7640000856134bc565b60008183106121fa578161178f565b5090919050565b60408051600080825260208201909252606091906122229060448101613516565b60408051601f19818403018152918152602080830180516001600160e01b03166352e831dd60e01b1790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe6020820152600160601b8502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be6041820152600160601b840260608201526e5af43d82803e903d91602b57fd5bf360881b607482015280826040516020016122ff929190613454565b6040516020818303038152906040529250505092915050565b60008060006123278585612556565b915091506123348161259b565b509392505050565b610ac58383836126e5565b611c118484848461275d565b604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b1580156123ba57600080fd5b505af11580156123ce573d6000803e3d6000fd5b505050505050505050565b60008083610140015160018111156123f3576123f3613311565b14801561241657506000826101400151600181111561241457612414613311565b145b156124235750600161082a565b6001836101400151600181111561243c5761243c613311565b14801561245f57506001826101400151600181111561245d5761245d613311565b145b1561246c5750600261082a565b50600092915050565b61247f83836127e0565b61249c57604051633fcd37a360e11b815260040160405180910390fd5b60008160028111156124b0576124b0613311565b036124dd578160800151836080015114610ac55760405163a0b9446560e01b815260040160405180910390fd5b610ac583608001518360800151610d8f565b6124fb8530868a611bed565b612508878786868661282a565b8561251284611de4565b1015612531576040516301be9b0160e71b815260040160405180910390fd5b61254130868561164a858b613411565b61254d30338584611d88565b50505050505050565b600080825160410361258c5760208301516040840151606085015160001a612580878285856128b2565b94509450505050612594565b506000905060025b9250929050565b60008160048111156125af576125af613311565b036125b75750565b60018160048111156125cb576125cb613311565b036126185760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610d19565b600281600481111561262c5761262c613311565b036126795760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610d19565b600381600481111561268d5761268d613311565b036109835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610d19565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611c115760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610d19565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806114f35760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610d19565b60008260c00151600014806127f7575060c0820151155b156128045750600161082a565b61178f61281084612976565b61281984612976565b856101400151856101400151612990565b600081600281111561283e5761283e613311565b146114f357600181600281111561285757612857613311565b0361287d576000828152600560205260409020600101546128789085612a2a565b6114f3565b600281600281111561289157612891613311565b036114f3576000838152600560205260409020600101546128789086612b35565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128e9575060009050600361296d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561293d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129665760006001925092505061296d565b9150600090505b94509492505050565b600061082a8260a001518360c0015184610140015161217c565b6000808360018111156129a5576129a5613311565b036129e95760008260018111156129be576129be613311565b036129df57670de0b6b3a76400006129d685876133f9565b101590506119d6565b50828410156119d6565b60008260018111156129fd576129fd613311565b03612a0c5750838310156119d6565b670de0b6b3a7640000612a1f85876133f9565b111595945050505050565b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612a6057612a606133cd565b602002602001018181525050600281600181518110612a8157612a816133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160e01b031960e084901b168152612b079190600090889087908990600401613549565b600060405180830381600087803b158015612b2157600080fd5b505af115801561254d573d6000803e3d6000fd5b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612b6b57612b6b6133cd565b602002602001018181525050600281600181518110612b8c57612b8c6133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e7212ad7f0000000000000000000000000000000000000000000000000000000000000000612add565b600060208284031215612bfe57600080fd5b81356001600160e01b03198116811461178f57600080fd5b6001600160a01b038116811461098357600080fd5b8035612c3681612c16565b919050565b60008060408385031215612c4e57600080fd5b8235612c5981612c16565b946020939093013593505050565b600060208284031215612c7957600080fd5b813561178f81612c16565b600060208284031215612c9657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b0381118282101715612cd657612cd6612c9d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612d0457612d04612c9d565b604052919050565b803560028110612c3657600080fd5b803560038110612c3657600080fd5b600082601f830112612d3b57600080fd5b81356001600160401b03811115612d5457612d54612c9d565b612d67601f8201601f1916602001612cdc565b818152846020838601011115612d7c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a08284031215612dac57600080fd5b612db4612cb3565b905081358152612dc660208301612c2b565b6020820152612dd760408301612c2b565b6040820152612de860608301612c2b565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140612e3b818401612d0c565b90820152610160612e4d838201612d1b565b90820152610180828101356001600160401b03811115612e6c57600080fd5b612e7885828601612d2a565b82840152505092915050565b600060208284031215612e9657600080fd5b81356001600160401b03811115612eac57600080fd5b6119d684828501612d99565b600080600060608486031215612ecd57600080fd5b505081359360208301359350604090920135919050565b60006001600160401b03821115612efd57612efd612c9d565b5060051b60200190565b600082601f830112612f1857600080fd5b81356020612f2d612f2883612ee4565b612cdc565b82815260059290921b84018101918181019086841115612f4c57600080fd5b8286015b84811015612f675780358352918301918301612f50565b509695505050505050565b600080600080600060a08688031215612f8a57600080fd5b8535612f9581612c16565b94506020860135612fa581612c16565b935060408601356001600160401b0380821115612fc157600080fd5b612fcd89838a01612f07565b94506060880135915080821115612fe357600080fd5b612fef89838a01612f07565b9350608088013591508082111561300557600080fd5b5061301288828901612d2a565b9150509295509295909350565b600082601f83011261303057600080fd5b81356020613040612f2883612ee4565b82815260059290921b8401810191818101908684111561305f57600080fd5b8286015b84811015612f675780356001600160401b038111156130825760008081fd5b6130908986838b0101612d99565b845250918301918301613063565b600080604083850312156130b157600080fd5b82356001600160401b03808211156130c857600080fd5b6130d48683870161301f565b935060208501359150808211156130ea57600080fd5b506130f785828601612f07565b9150509250929050565b6000806040838503121561311457600080fd5b50508035926020909101359150565b6000806040838503121561313657600080fd5b8235915060208301356001600160401b0381111561315357600080fd5b6130f785828601612d99565b6000806000806080858703121561317557600080fd5b84356001600160401b038082111561318c57600080fd5b61319888838901612d99565b955060208701359150808211156131ae57600080fd5b6131ba8883890161301f565b94506040870135935060608701359150808211156131d757600080fd5b506131e487828801612f07565b91505092959194509250565b600080600080600060a0868803121561320857600080fd5b853561321381612c16565b9450602086013561322381612c16565b9350604086013592506060860135915060808601356001600160401b0381111561324c57600080fd5b61301288828901612d2a565b60006020828403121561326a57600080fd5b81356001600160401b0381111561328057600080fd5b6119d68482850161301f565b6000806040838503121561329f57600080fd5b82356001600160401b038111156132b557600080fd5b6132c185828601612d99565b95602094909401359450505050565b6000602082840312156132e257600080fd5b815161178f81612c16565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b6003811061333757613337613311565b9052565b8d8152602081018d90526001600160a01b038c811660408301528b811660608301528a16608082015260a0810189905260c0810188905260e081018790526101008101869052610120810185905261014081018490526101a08101600284106133a6576133a6613311565b836101608301526133bb610180830184613327565b9e9d5050505050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561340c5761340c6133e3565b500190565b600082821015613423576134236133e3565b500390565b60005b8381101561344357818101518382015260200161342b565b83811115611c115750506000910152565b60008351613466818460208801613428565b83519083019061347a818360208801613428565b01949350505050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60008160001904831182151516156134d6576134d66133e3565b500290565b6000826134f857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561350f57600080fd5b5051919050565b6020815260008251806020840152613535816040850160208701613428565b601f01601f19169190910160400192915050565b6001600160a01b038616815260208082018690526040820185905260a06060830181905284519083018190526000918581019160c0850190845b8181101561359f57845183529383019391830191600101613583565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a2646970667358221220d93139e32bae530b273044d07d00326d19debeb5b49b08f172b04a7bc677797964736f6c634300080f00330000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa841740000000000000000000000004d97dcd97ec945f40cf65f87097ace5ea0476045000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x1107e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x110f1\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x7d3c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x84d2\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [],\n  \"libraries\": [],\n  \"pending\": [],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/137/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\"\n    }\n  },\n  \"timestamp\": 1663955866,\n  \"commit\": \"ec7c23f\"\n}"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/137/deployExchange-1663958824.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": null,\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n        \"0x4D97DCd97eC945f40cF65F87097ACe5EA0476045\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"gas\": \"0x41072e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b5060405162003b6538038062003b658339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e051610100516101205161014051610160516101805161375e62000407600039600061079e01526000818161043401528181611e9a0152818161206e01528181612a8e0152612b9901526000818161055701528181611e0b0152818161202301528181612abd0152612bc801526000611ac901526000611b1801526000611af301526000611a4c01526000611a7601526000611aa0015261375e6000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80637048027511610182578063d798eff6116100e9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610799578063fa950b48146107c0578063fbddd751146107d3578063fe729aaf146107e657600080fd5b8063e60f0c0514610754578063edef7d8e14610767578063f23a6e611461077a57600080fd5b8063d798eff6146106dd578063d7fb272f146106f0578063d82da83814610713578063e03ac3d014610726578063e2eec4051461072e578063e50e4f971461074157600080fd5b8063a287bdf11161013b578063a287bdf114610654578063a6dfcf8614610667578063ac8a584a1461067a578063b28c51c01461068d578063bc197c811461069e578063c10f1a75146106ca57600080fd5b806370480275146105e257806375d7370a146105f55780637ecebe001461060657806383b8a5ae146106265780639870d7fe1461062e578063a10f3dce1461064157600080fd5b8063429b62e5116102415780635893253c116101fa578063627cdcb9116101d4578063627cdcb914610588578063654f0ce41461059057806368c7450f146105a35780636d70f7ae146105b657600080fd5b80635893253c146105195780635c1548fb146105555780635c975abb1461057b57600080fd5b8063429b62e51461046057806344bea37e146104805780634544f05514610488578063456068d21461049b57806346423aa7146104a35780634a2a11f51461051157600080fd5b80631785f53c116102935780631785f53c1461039b57806324d7806c146103ae5780632dff692d146103db578063346009011461041f5780633b521d78146104325780633d6d35981461045857600080fd5b806301ffc9a7146102db5780630647ee201461030357806306b9d691146103305780631031e36e14610350578063131e7e1c1461035a57806313e7c9d81461036d575b600080fd5b6102ee6102e9366004612bec565b6107f9565b60405190151581526020015b60405180910390f35b6102ee610311366004612c3b565b6001600160a01b03919091166000908152600460205260409020541490565b610338610830565b6040516001600160a01b0390911681526020016102fa565b6103586108a3565b005b600754610338906001600160a01b031681565b61038d61037b366004612c67565b60026020526000908152604090205481565b6040519081526020016102fa565b6103586103a9366004612c67565b6108de565b6102ee6103bc366004612c67565b6001600160a01b03166000908152600160208190526040909120541490565b6104086103e9366004612c84565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016102fa565b61035861042d366004612c84565b610955565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b610358610986565b61038d61046e366004612c67565b60016020526000908152604090205481565b61038d600081565b610358610496366004612c67565b6109f1565b610358610a2b565b6104f46104b1366004612c84565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b6040805182511515815260209283015192810192909252016102fa565b6103e861038d565b610540610527366004612c84565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016102fa565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b6003546102ee9060ff1681565b610358610a64565b61035861059e366004612e84565b610a6e565b6103586105b1366004612eb8565b610a89565b6102ee6105c4366004612c67565b6001600160a01b031660009081526002602052604090205460011490565b6103586105f0366004612c67565b610aca565b6007546001600160a01b0316610338565b61038d610614366004612c67565b60046020526000908152604090205481565b610358610b44565b61035861063c366004612c67565b610bb0565b61038d61064f366004612c84565b610c28565b610338610662366004612c67565b610c46565b610358610675366004612e84565b610c65565b610358610688366004612c67565b610c6e565b6006546001600160a01b0316610338565b6106b16106ac366004612f72565b610ce5565b6040516001600160e01b031990911681526020016102fa565b600654610338906001600160a01b031681565b6103586106eb36600461309e565b610cf7565b61038d6106fe366004612c84565b60009081526005602052604090206001015490565b610358610721366004613101565b610d8f565b610338610db7565b61035861073c366004613123565b610e01565b61038d61074f366004612e84565b610e3d565b61035861076236600461315f565b610eda565b610338610775366004612c67565b610f6c565b6106b16107883660046131f0565b63f23a6e6160e01b95945050505050565b61038d7f000000000000000000000000000000000000000000000000000000000000000081565b6103586107ce366004613258565b610f8b565b6103586107e1366004612c67565b610fc2565b6103586107f436600461328c565b610ffc565b60006001600160e01b03198216630271189760e51b148061082a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546040805163557887a160e11b815290516000926001600160a01b03169163aaf10f429160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e91906132d0565b905090565b33600090815260016020819052604090912054146108d457604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611082565b565b336000908152600160208190526040909120541461090f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610983576040516307ed98ed60e31b815260040160405180910390fd5b50565b336000908152600260205260409020546001146109b657604051631f0853c160e21b815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610a2257604051637bfa4b9f60e01b815260040160405180910390fd5b610983816110bc565b3360009081526001602081905260409091205414610a5c57604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611118565b6108dc600161114f565b6000610a7982610e3d565b9050610a85818361117d565b5050565b3360009081526001602081905260409091205414610aba57604051637bfa4b9f60e01b815260040160405180910390fd5b610ac583838361126b565b505050565b3360009081526001602081905260409091205414610afb57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610b7557604051637bfa4b9f60e01b815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610be157604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610c3382610955565b5060009081526005602052604090205490565b600061082a82610c54610db7565b6007546001600160a01b0316611395565b610983816113f9565b3360009081526001602081905260409091205414610c9f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b63bc197c8160e01b5b95945050505050565b600054600203610d225760405162461bcd60e51b8152600401610d19906132ed565b60405180910390fd5b600260008181553381526020919091526040902054600114610d5757604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610d7b576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336114a1565b50506001600055565b80610d9983610c28565b14610a855760405163337c310560e11b815260040160405180910390fd5b6007546040805163530ca43760e11b815290516000926001600160a01b03169163a619486e9160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b610e2081604001518260200151848461018001518561016001516114fa565b610a8557604051638baa579f60e01b815260040160405180910390fd5b600061082a7fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e6101600151604051602001610ebf9d9c9b9a9998979695949392919061333b565b60405160208183030381529060405280519060200120611558565b600054600203610efc5760405162461bcd60e51b8152600401610d19906132ed565b600260008181553381526020919091526040902054600114610f3157604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610f55576040516313d0ff5960e31b815260040160405180910390fd5b610f61848484846115a6565b505060016000555050565b600061082a82610f7a610830565b6006546001600160a01b0316611747565b805160005b81811015610ac557610fba838281518110610fad57610fad6133cd565b60200260200101516113f9565b600101610f90565b3360009081526001602081905260409091205414610ff357604051637bfa4b9f60e01b815260040160405180910390fd5b61098381611796565b60005460020361101e5760405162461bcd60e51b8152600401610d19906132ed565b60026000818155338152602091909152604090205460011461105357604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615611077576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336117f2565b6003805460ff1916600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b6007546040516001600160a01b038084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6003805460ff1916905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b3360009081526004602052604090205461116a9082906133f9565b3360009081526004602052604090205550565b60008160e001511180156111945750428160e00151105b156111b2576040516362b439dd60e11b815260040160405180910390fd5b6111bc8282610e01565b6103e881610120015111156111e45760405163cd4e616760e01b815260040160405180910390fd5b6111f18160800151610955565b60008281526008602052604090205460ff161561122157604051633d9c5bb760e11b815260040160405180910390fd5b61124e81602001518261010001516001600160a01b03919091166000908152600460205260409020541490565b610a8557604051633ab3447f60e11b815260040160405180910390fd5b8183148061127f575082158061127f575081155b1561129d576040516307ed98ed60e31b815260040160405180910390fd5b6000838152600560205260409020541515806112c6575060008281526005602052604090205415155b156112e457604051630ea075bf60e21b815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b6000806113a184611905565b8051906020012090506000856040516020016113cc91906001600160a01b0391909116815260200190565b6040516020818303038152906040528051906020012090506113ef84838361196b565b9695505050505050565b60208101516001600160a01b03163314611426576040516330cd747160e01b815260040160405180910390fd5b600061143182610e3d565b600081815260086020526040902080549192509060ff161561146657604051633d9c5bb760e11b815260040160405180910390fd5b805460ff1916600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b818110156114f3576114eb8582815181106114c3576114c36133cd565b60200260200101518583815181106114dd576114dd6133cd565b6020026020010151856117f2565b6001016114a6565b5050505050565b60008082600281111561150f5761150f613311565b0361152757611520868686866119aa565b9050610cee565b600282600281111561153b5761153b613311565b0361154c57611520868686866119de565b61152086868686611a18565b600061082a611565611a3f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080806115b58885611b66565b9250925092506000806115c78a611bb6565b915091506115db8a60200151308489611bed565b6115e68a8a89611c17565b6115f08582611c69565b6101208b015190955060009061163290828d6101400151600181111561161857611618613311565b146116235788611625565b875b89898f6101400151611c98565b905061164f308c6020015184848a61164a9190613411565b611bed565b61165b30338484611d88565b60208b810151604080518681529283018590528201899052606082018790526080820183905230916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a46020808c0151604080518681529283018590528201899052606082018890526001600160a01b03169085907f63bf4d16b7fa898ef4c4b2b6d90fd201e9c56313b65638af6088d149d2ce956c9060800160405180910390a3600061172184611de4565b9050801561173957611739308d602001518684611bed565b505050505050505050505050565b6040516bffffffffffffffffffffffff19606085901b16602082015260009061178c908390859060340160405160208183030381529060405280519060200120611ec8565b90505b9392505050565b6006546040516001600160a01b038084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b81600080806118018785611b66565b925092509250600061185e8861012001516000600181111561182557611825613311565b8a6101400151600181111561183c5761183c613311565b146118475786611849565b855b8a60a001518b60c001518c6101400151611c98565b905060008061186c8a611bb6565b91509150611886338b6020015183868a61164a9190613411565b6118968a6020015189848a611bed565b60208a810151604080518581529283018490528201899052606082018790526080820185905233916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a450505050505050505050565b6060604051806101a0016040528061017181526020016135b86101719139604080516001600160a01b03851660208201520160408051601f19818403018152908290526119559291602001613454565b6040516020818303038152906040529050919050565b60008060ff60f81b8584866040516020016119899493929190613483565b60408051808303601f19018152919052805160209091012095945050505050565b6000836001600160a01b0316856001600160a01b03161480156119d357506119d3858484611f1d565b90505b949350505050565b60006119eb858484611f1d565b80156119d35750836001600160a01b0316611a0586610c46565b6001600160a01b03161495945050505050565b6000611a25858484611f1d565b80156119d35750836001600160a01b0316611a0586610f6c565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a9857507f000000000000000000000000000000000000000000000000000000000000000046145b15611ac257507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806000611b788560600151611f45565b611b8185610e3d565b9050611b8d818661117d565b611ba0848660a001518760c00151611f84565b9250611bad818686611fab565b91509250925092565b600080808361014001516001811115611bd157611bd1613311565b03611be157505060800151600091565b50506080015190600090565b81600003611c0557611c00848483612021565b611c11565b611c1184848484612069565b50505050565b815160005b818110156114f357611c6185858381518110611c3a57611c3a6133cd565b6020026020010151858481518110611c5457611c546133cd565b6020026020010151612096565b600101611c1c565b600080611c7583611de4565b90508381101561178f576040516301be9b0160e71b815260040160405180910390fd5b60008515610cee576000611cad85858561217c565b9050600081118015611cc75750670de0b6b3a76400008111155b15611d7e576000836001811115611ce057611ce0613311565b03611d3257611cf1612710826134bc565b86611d0d83611d0881670de0b6b3a7640000613411565b6121eb565b611d17908a6134bc565b611d2191906134bc565b611d2b91906134db565b9150611d7e565b611d46670de0b6b3a76400006127106134bc565b86611d5d83611d0881670de0b6b3a7640000613411565b611d67908a6134bc565b611d7191906134bc565b611d7b91906134db565b91505b5095945050505050565b8015611c1157611d9a84848484611bed565b60408051838152602081018390526001600160a01b038516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b600081600003611e77576040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015611e53573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082a91906134fd565b604051627eeac760e11b8152306004820152602481018390526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90604401611e36565b600080611ed58585612201565b805190602001209050600060ff60f81b868584604051602001611efb9493929190613483565b60408051808303601f1901815291905280516020909101209695505050505050565b6000836001600160a01b0316611f338484612318565b6001600160a01b031614949350505050565b6001600160a01b03811615801590611f6657506001600160a01b0381163314155b1561098357604051635211a07960e01b815260040160405180910390fd5b600082600003611f965750600061178f565b82611fa183866134bc565b61178c91906134db565b60008381526008602052604090206001810154908115611fcb5781611fd1565b8360a001515b915081831115611ff457604051637166356b60e11b815260040160405180910390fd5b611ffe8383613411565b91508160000361201457805460ff191660011781555b6001018190559392505050565b7f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b0385160361205d57611c0081848461233c565b611c1181858585612347565b611c117f000000000000000000000000000000000000000000000000000000000000000085858585612353565b60006120a284846123d9565b90506120af848483612475565b81600080806120be8785611b66565b92509250925060006120e28861012001516000600181111561182557611825613311565b90506000806120f08a611bb6565b9150915061210787878c6020015185858d896124ef565b6020808c01518b8201516040805186815293840185905283018a905260608301889052608083018690526001600160a01b039182169291169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a45050505050505050505050565b60008082600181111561219157612191613311565b036121c957826000036121a55760006121c2565b826121b8670de0b6b3a7640000866134bc565b6121c291906134db565b905061178f565b836000036121d857600061178c565b83611fa1670de0b6b3a7640000856134bc565b60008183106121fa578161178f565b5090919050565b60408051600080825260208201909252606091906122229060448101613516565b60408051601f19818403018152918152602080830180516001600160e01b03166352e831dd60e01b1790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe6020820152600160601b8502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be6041820152600160601b840260608201526e5af43d82803e903d91602b57fd5bf360881b607482015280826040516020016122ff929190613454565b6040516020818303038152906040529250505092915050565b60008060006123278585612556565b915091506123348161259b565b509392505050565b610ac58383836126e5565b611c118484848461275d565b604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b1580156123ba57600080fd5b505af11580156123ce573d6000803e3d6000fd5b505050505050505050565b60008083610140015160018111156123f3576123f3613311565b14801561241657506000826101400151600181111561241457612414613311565b145b156124235750600161082a565b6001836101400151600181111561243c5761243c613311565b14801561245f57506001826101400151600181111561245d5761245d613311565b145b1561246c5750600261082a565b50600092915050565b61247f83836127e0565b61249c57604051633fcd37a360e11b815260040160405180910390fd5b60008160028111156124b0576124b0613311565b036124dd578160800151836080015114610ac55760405163a0b9446560e01b815260040160405180910390fd5b610ac583608001518360800151610d8f565b6124fb8530868a611bed565b612508878786868661282a565b8561251284611de4565b1015612531576040516301be9b0160e71b815260040160405180910390fd5b61254130868561164a858b613411565b61254d30338584611d88565b50505050505050565b600080825160410361258c5760208301516040840151606085015160001a612580878285856128b2565b94509450505050612594565b506000905060025b9250929050565b60008160048111156125af576125af613311565b036125b75750565b60018160048111156125cb576125cb613311565b036126185760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610d19565b600281600481111561262c5761262c613311565b036126795760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610d19565b600381600481111561268d5761268d613311565b036109835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610d19565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611c115760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610d19565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806114f35760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610d19565b60008260c00151600014806127f7575060c0820151155b156128045750600161082a565b61178f61281084612976565b61281984612976565b856101400151856101400151612990565b600081600281111561283e5761283e613311565b146114f357600181600281111561285757612857613311565b0361287d576000828152600560205260409020600101546128789085612a2a565b6114f3565b600281600281111561289157612891613311565b036114f3576000838152600560205260409020600101546128789086612b35565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128e9575060009050600361296d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561293d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129665760006001925092505061296d565b9150600090505b94509492505050565b600061082a8260a001518360c0015184610140015161217c565b6000808360018111156129a5576129a5613311565b036129e95760008260018111156129be576129be613311565b036129df57670de0b6b3a76400006129d685876133f9565b101590506119d6565b50828410156119d6565b60008260018111156129fd576129fd613311565b03612a0c5750838310156119d6565b670de0b6b3a7640000612a1f85876133f9565b111595945050505050565b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612a6057612a606133cd565b602002602001018181525050600281600181518110612a8157612a816133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160e01b031960e084901b168152612b079190600090889087908990600401613549565b600060405180830381600087803b158015612b2157600080fd5b505af115801561254d573d6000803e3d6000fd5b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612b6b57612b6b6133cd565b602002602001018181525050600281600181518110612b8c57612b8c6133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e7212ad7f0000000000000000000000000000000000000000000000000000000000000000612add565b600060208284031215612bfe57600080fd5b81356001600160e01b03198116811461178f57600080fd5b6001600160a01b038116811461098357600080fd5b8035612c3681612c16565b919050565b60008060408385031215612c4e57600080fd5b8235612c5981612c16565b946020939093013593505050565b600060208284031215612c7957600080fd5b813561178f81612c16565b600060208284031215612c9657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b0381118282101715612cd657612cd6612c9d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612d0457612d04612c9d565b604052919050565b803560028110612c3657600080fd5b803560038110612c3657600080fd5b600082601f830112612d3b57600080fd5b81356001600160401b03811115612d5457612d54612c9d565b612d67601f8201601f1916602001612cdc565b818152846020838601011115612d7c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a08284031215612dac57600080fd5b612db4612cb3565b905081358152612dc660208301612c2b565b6020820152612dd760408301612c2b565b6040820152612de860608301612c2b565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140612e3b818401612d0c565b90820152610160612e4d838201612d1b565b90820152610180828101356001600160401b03811115612e6c57600080fd5b612e7885828601612d2a565b82840152505092915050565b600060208284031215612e9657600080fd5b81356001600160401b03811115612eac57600080fd5b6119d684828501612d99565b600080600060608486031215612ecd57600080fd5b505081359360208301359350604090920135919050565b60006001600160401b03821115612efd57612efd612c9d565b5060051b60200190565b600082601f830112612f1857600080fd5b81356020612f2d612f2883612ee4565b612cdc565b82815260059290921b84018101918181019086841115612f4c57600080fd5b8286015b84811015612f675780358352918301918301612f50565b509695505050505050565b600080600080600060a08688031215612f8a57600080fd5b8535612f9581612c16565b94506020860135612fa581612c16565b935060408601356001600160401b0380821115612fc157600080fd5b612fcd89838a01612f07565b94506060880135915080821115612fe357600080fd5b612fef89838a01612f07565b9350608088013591508082111561300557600080fd5b5061301288828901612d2a565b9150509295509295909350565b600082601f83011261303057600080fd5b81356020613040612f2883612ee4565b82815260059290921b8401810191818101908684111561305f57600080fd5b8286015b84811015612f675780356001600160401b038111156130825760008081fd5b6130908986838b0101612d99565b845250918301918301613063565b600080604083850312156130b157600080fd5b82356001600160401b03808211156130c857600080fd5b6130d48683870161301f565b935060208501359150808211156130ea57600080fd5b506130f785828601612f07565b9150509250929050565b6000806040838503121561311457600080fd5b50508035926020909101359150565b6000806040838503121561313657600080fd5b8235915060208301356001600160401b0381111561315357600080fd5b6130f785828601612d99565b6000806000806080858703121561317557600080fd5b84356001600160401b038082111561318c57600080fd5b61319888838901612d99565b955060208701359150808211156131ae57600080fd5b6131ba8883890161301f565b94506040870135935060608701359150808211156131d757600080fd5b506131e487828801612f07565b91505092959194509250565b600080600080600060a0868803121561320857600080fd5b853561321381612c16565b9450602086013561322381612c16565b9350604086013592506060860135915060808601356001600160401b0381111561324c57600080fd5b61301288828901612d2a565b60006020828403121561326a57600080fd5b81356001600160401b0381111561328057600080fd5b6119d68482850161301f565b6000806040838503121561329f57600080fd5b82356001600160401b038111156132b557600080fd5b6132c185828601612d99565b95602094909401359450505050565b6000602082840312156132e257600080fd5b815161178f81612c16565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b6003811061333757613337613311565b9052565b8d8152602081018d90526001600160a01b038c811660408301528b811660608301528a16608082015260a0810189905260c0810188905260e081018790526101008101869052610120810185905261014081018490526101a08101600284106133a6576133a6613311565b836101608301526133bb610180830184613327565b9e9d5050505050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561340c5761340c6133e3565b500190565b600082821015613423576134236133e3565b500390565b60005b8381101561344357818101518382015260200161342b565b83811115611c115750506000910152565b60008351613466818460208801613428565b83519083019061347a818360208801613428565b01949350505050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60008160001904831182151516156134d6576134d66133e3565b500290565b6000826134f857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561350f57600080fd5b5051919050565b6020815260008251806020840152613535816040850160208701613428565b601f01601f19169190910160400192915050565b6001600160a01b038616815260208082018690526040820185905260a06060830181905284519083018190526000918581019160c0850190845b8181101561359f57845183529383019391830191600101613583565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a2646970667358221220d93139e32bae530b273044d07d00326d19debeb5b49b08f172b04a7bc677797964736f6c634300080f00330000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa841740000000000000000000000004d97dcd97ec945f40cf65f87097ace5ea0476045000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x1107e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x110f1\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x7d3c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x84d2\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [],\n  \"libraries\": [],\n  \"pending\": [],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/137/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\"\n    }\n  },\n  \"timestamp\": 1663958824,\n  \"commit\": \"ec7c23f\"\n}"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/137/deployExchange-1663958850.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": null,\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n        \"0x4D97DCd97eC945f40cF65F87097ACe5EA0476045\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"gas\": \"0x41072e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b5060405162003b6538038062003b658339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e051610100516101205161014051610160516101805161375e62000407600039600061079e01526000818161043401528181611e9a0152818161206e01528181612a8e0152612b9901526000818161055701528181611e0b0152818161202301528181612abd0152612bc801526000611ac901526000611b1801526000611af301526000611a4c01526000611a7601526000611aa0015261375e6000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80637048027511610182578063d798eff6116100e9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610799578063fa950b48146107c0578063fbddd751146107d3578063fe729aaf146107e657600080fd5b8063e60f0c0514610754578063edef7d8e14610767578063f23a6e611461077a57600080fd5b8063d798eff6146106dd578063d7fb272f146106f0578063d82da83814610713578063e03ac3d014610726578063e2eec4051461072e578063e50e4f971461074157600080fd5b8063a287bdf11161013b578063a287bdf114610654578063a6dfcf8614610667578063ac8a584a1461067a578063b28c51c01461068d578063bc197c811461069e578063c10f1a75146106ca57600080fd5b806370480275146105e257806375d7370a146105f55780637ecebe001461060657806383b8a5ae146106265780639870d7fe1461062e578063a10f3dce1461064157600080fd5b8063429b62e5116102415780635893253c116101fa578063627cdcb9116101d4578063627cdcb914610588578063654f0ce41461059057806368c7450f146105a35780636d70f7ae146105b657600080fd5b80635893253c146105195780635c1548fb146105555780635c975abb1461057b57600080fd5b8063429b62e51461046057806344bea37e146104805780634544f05514610488578063456068d21461049b57806346423aa7146104a35780634a2a11f51461051157600080fd5b80631785f53c116102935780631785f53c1461039b57806324d7806c146103ae5780632dff692d146103db578063346009011461041f5780633b521d78146104325780633d6d35981461045857600080fd5b806301ffc9a7146102db5780630647ee201461030357806306b9d691146103305780631031e36e14610350578063131e7e1c1461035a57806313e7c9d81461036d575b600080fd5b6102ee6102e9366004612bec565b6107f9565b60405190151581526020015b60405180910390f35b6102ee610311366004612c3b565b6001600160a01b03919091166000908152600460205260409020541490565b610338610830565b6040516001600160a01b0390911681526020016102fa565b6103586108a3565b005b600754610338906001600160a01b031681565b61038d61037b366004612c67565b60026020526000908152604090205481565b6040519081526020016102fa565b6103586103a9366004612c67565b6108de565b6102ee6103bc366004612c67565b6001600160a01b03166000908152600160208190526040909120541490565b6104086103e9366004612c84565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016102fa565b61035861042d366004612c84565b610955565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b610358610986565b61038d61046e366004612c67565b60016020526000908152604090205481565b61038d600081565b610358610496366004612c67565b6109f1565b610358610a2b565b6104f46104b1366004612c84565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b6040805182511515815260209283015192810192909252016102fa565b6103e861038d565b610540610527366004612c84565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016102fa565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b6003546102ee9060ff1681565b610358610a64565b61035861059e366004612e84565b610a6e565b6103586105b1366004612eb8565b610a89565b6102ee6105c4366004612c67565b6001600160a01b031660009081526002602052604090205460011490565b6103586105f0366004612c67565b610aca565b6007546001600160a01b0316610338565b61038d610614366004612c67565b60046020526000908152604090205481565b610358610b44565b61035861063c366004612c67565b610bb0565b61038d61064f366004612c84565b610c28565b610338610662366004612c67565b610c46565b610358610675366004612e84565b610c65565b610358610688366004612c67565b610c6e565b6006546001600160a01b0316610338565b6106b16106ac366004612f72565b610ce5565b6040516001600160e01b031990911681526020016102fa565b600654610338906001600160a01b031681565b6103586106eb36600461309e565b610cf7565b61038d6106fe366004612c84565b60009081526005602052604090206001015490565b610358610721366004613101565b610d8f565b610338610db7565b61035861073c366004613123565b610e01565b61038d61074f366004612e84565b610e3d565b61035861076236600461315f565b610eda565b610338610775366004612c67565b610f6c565b6106b16107883660046131f0565b63f23a6e6160e01b95945050505050565b61038d7f000000000000000000000000000000000000000000000000000000000000000081565b6103586107ce366004613258565b610f8b565b6103586107e1366004612c67565b610fc2565b6103586107f436600461328c565b610ffc565b60006001600160e01b03198216630271189760e51b148061082a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546040805163557887a160e11b815290516000926001600160a01b03169163aaf10f429160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e91906132d0565b905090565b33600090815260016020819052604090912054146108d457604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611082565b565b336000908152600160208190526040909120541461090f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610983576040516307ed98ed60e31b815260040160405180910390fd5b50565b336000908152600260205260409020546001146109b657604051631f0853c160e21b815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610a2257604051637bfa4b9f60e01b815260040160405180910390fd5b610983816110bc565b3360009081526001602081905260409091205414610a5c57604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611118565b6108dc600161114f565b6000610a7982610e3d565b9050610a85818361117d565b5050565b3360009081526001602081905260409091205414610aba57604051637bfa4b9f60e01b815260040160405180910390fd5b610ac583838361126b565b505050565b3360009081526001602081905260409091205414610afb57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610b7557604051637bfa4b9f60e01b815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610be157604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610c3382610955565b5060009081526005602052604090205490565b600061082a82610c54610db7565b6007546001600160a01b0316611395565b610983816113f9565b3360009081526001602081905260409091205414610c9f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b63bc197c8160e01b5b95945050505050565b600054600203610d225760405162461bcd60e51b8152600401610d19906132ed565b60405180910390fd5b600260008181553381526020919091526040902054600114610d5757604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610d7b576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336114a1565b50506001600055565b80610d9983610c28565b14610a855760405163337c310560e11b815260040160405180910390fd5b6007546040805163530ca43760e11b815290516000926001600160a01b03169163a619486e9160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b610e2081604001518260200151848461018001518561016001516114fa565b610a8557604051638baa579f60e01b815260040160405180910390fd5b600061082a7fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e6101600151604051602001610ebf9d9c9b9a9998979695949392919061333b565b60405160208183030381529060405280519060200120611558565b600054600203610efc5760405162461bcd60e51b8152600401610d19906132ed565b600260008181553381526020919091526040902054600114610f3157604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610f55576040516313d0ff5960e31b815260040160405180910390fd5b610f61848484846115a6565b505060016000555050565b600061082a82610f7a610830565b6006546001600160a01b0316611747565b805160005b81811015610ac557610fba838281518110610fad57610fad6133cd565b60200260200101516113f9565b600101610f90565b3360009081526001602081905260409091205414610ff357604051637bfa4b9f60e01b815260040160405180910390fd5b61098381611796565b60005460020361101e5760405162461bcd60e51b8152600401610d19906132ed565b60026000818155338152602091909152604090205460011461105357604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615611077576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336117f2565b6003805460ff1916600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b6007546040516001600160a01b038084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6003805460ff1916905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b3360009081526004602052604090205461116a9082906133f9565b3360009081526004602052604090205550565b60008160e001511180156111945750428160e00151105b156111b2576040516362b439dd60e11b815260040160405180910390fd5b6111bc8282610e01565b6103e881610120015111156111e45760405163cd4e616760e01b815260040160405180910390fd5b6111f18160800151610955565b60008281526008602052604090205460ff161561122157604051633d9c5bb760e11b815260040160405180910390fd5b61124e81602001518261010001516001600160a01b03919091166000908152600460205260409020541490565b610a8557604051633ab3447f60e11b815260040160405180910390fd5b8183148061127f575082158061127f575081155b1561129d576040516307ed98ed60e31b815260040160405180910390fd5b6000838152600560205260409020541515806112c6575060008281526005602052604090205415155b156112e457604051630ea075bf60e21b815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b6000806113a184611905565b8051906020012090506000856040516020016113cc91906001600160a01b0391909116815260200190565b6040516020818303038152906040528051906020012090506113ef84838361196b565b9695505050505050565b60208101516001600160a01b03163314611426576040516330cd747160e01b815260040160405180910390fd5b600061143182610e3d565b600081815260086020526040902080549192509060ff161561146657604051633d9c5bb760e11b815260040160405180910390fd5b805460ff1916600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b818110156114f3576114eb8582815181106114c3576114c36133cd565b60200260200101518583815181106114dd576114dd6133cd565b6020026020010151856117f2565b6001016114a6565b5050505050565b60008082600281111561150f5761150f613311565b0361152757611520868686866119aa565b9050610cee565b600282600281111561153b5761153b613311565b0361154c57611520868686866119de565b61152086868686611a18565b600061082a611565611a3f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080806115b58885611b66565b9250925092506000806115c78a611bb6565b915091506115db8a60200151308489611bed565b6115e68a8a89611c17565b6115f08582611c69565b6101208b015190955060009061163290828d6101400151600181111561161857611618613311565b146116235788611625565b875b89898f6101400151611c98565b905061164f308c6020015184848a61164a9190613411565b611bed565b61165b30338484611d88565b60208b810151604080518681529283018590528201899052606082018790526080820183905230916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a46020808c0151604080518681529283018590528201899052606082018890526001600160a01b03169085907f63bf4d16b7fa898ef4c4b2b6d90fd201e9c56313b65638af6088d149d2ce956c9060800160405180910390a3600061172184611de4565b9050801561173957611739308d602001518684611bed565b505050505050505050505050565b6040516bffffffffffffffffffffffff19606085901b16602082015260009061178c908390859060340160405160208183030381529060405280519060200120611ec8565b90505b9392505050565b6006546040516001600160a01b038084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b81600080806118018785611b66565b925092509250600061185e8861012001516000600181111561182557611825613311565b8a6101400151600181111561183c5761183c613311565b146118475786611849565b855b8a60a001518b60c001518c6101400151611c98565b905060008061186c8a611bb6565b91509150611886338b6020015183868a61164a9190613411565b6118968a6020015189848a611bed565b60208a810151604080518581529283018490528201899052606082018790526080820185905233916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a450505050505050505050565b6060604051806101a0016040528061017181526020016135b86101719139604080516001600160a01b03851660208201520160408051601f19818403018152908290526119559291602001613454565b6040516020818303038152906040529050919050565b60008060ff60f81b8584866040516020016119899493929190613483565b60408051808303601f19018152919052805160209091012095945050505050565b6000836001600160a01b0316856001600160a01b03161480156119d357506119d3858484611f1d565b90505b949350505050565b60006119eb858484611f1d565b80156119d35750836001600160a01b0316611a0586610c46565b6001600160a01b03161495945050505050565b6000611a25858484611f1d565b80156119d35750836001600160a01b0316611a0586610f6c565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a9857507f000000000000000000000000000000000000000000000000000000000000000046145b15611ac257507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806000611b788560600151611f45565b611b8185610e3d565b9050611b8d818661117d565b611ba0848660a001518760c00151611f84565b9250611bad818686611fab565b91509250925092565b600080808361014001516001811115611bd157611bd1613311565b03611be157505060800151600091565b50506080015190600090565b81600003611c0557611c00848483612021565b611c11565b611c1184848484612069565b50505050565b815160005b818110156114f357611c6185858381518110611c3a57611c3a6133cd565b6020026020010151858481518110611c5457611c546133cd565b6020026020010151612096565b600101611c1c565b600080611c7583611de4565b90508381101561178f576040516301be9b0160e71b815260040160405180910390fd5b60008515610cee576000611cad85858561217c565b9050600081118015611cc75750670de0b6b3a76400008111155b15611d7e576000836001811115611ce057611ce0613311565b03611d3257611cf1612710826134bc565b86611d0d83611d0881670de0b6b3a7640000613411565b6121eb565b611d17908a6134bc565b611d2191906134bc565b611d2b91906134db565b9150611d7e565b611d46670de0b6b3a76400006127106134bc565b86611d5d83611d0881670de0b6b3a7640000613411565b611d67908a6134bc565b611d7191906134bc565b611d7b91906134db565b91505b5095945050505050565b8015611c1157611d9a84848484611bed565b60408051838152602081018390526001600160a01b038516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b600081600003611e77576040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015611e53573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082a91906134fd565b604051627eeac760e11b8152306004820152602481018390526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90604401611e36565b600080611ed58585612201565b805190602001209050600060ff60f81b868584604051602001611efb9493929190613483565b60408051808303601f1901815291905280516020909101209695505050505050565b6000836001600160a01b0316611f338484612318565b6001600160a01b031614949350505050565b6001600160a01b03811615801590611f6657506001600160a01b0381163314155b1561098357604051635211a07960e01b815260040160405180910390fd5b600082600003611f965750600061178f565b82611fa183866134bc565b61178c91906134db565b60008381526008602052604090206001810154908115611fcb5781611fd1565b8360a001515b915081831115611ff457604051637166356b60e11b815260040160405180910390fd5b611ffe8383613411565b91508160000361201457805460ff191660011781555b6001018190559392505050565b7f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b0385160361205d57611c0081848461233c565b611c1181858585612347565b611c117f000000000000000000000000000000000000000000000000000000000000000085858585612353565b60006120a284846123d9565b90506120af848483612475565b81600080806120be8785611b66565b92509250925060006120e28861012001516000600181111561182557611825613311565b90506000806120f08a611bb6565b9150915061210787878c6020015185858d896124ef565b6020808c01518b8201516040805186815293840185905283018a905260608301889052608083018690526001600160a01b039182169291169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a45050505050505050505050565b60008082600181111561219157612191613311565b036121c957826000036121a55760006121c2565b826121b8670de0b6b3a7640000866134bc565b6121c291906134db565b905061178f565b836000036121d857600061178c565b83611fa1670de0b6b3a7640000856134bc565b60008183106121fa578161178f565b5090919050565b60408051600080825260208201909252606091906122229060448101613516565b60408051601f19818403018152918152602080830180516001600160e01b03166352e831dd60e01b1790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe6020820152600160601b8502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be6041820152600160601b840260608201526e5af43d82803e903d91602b57fd5bf360881b607482015280826040516020016122ff929190613454565b6040516020818303038152906040529250505092915050565b60008060006123278585612556565b915091506123348161259b565b509392505050565b610ac58383836126e5565b611c118484848461275d565b604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b1580156123ba57600080fd5b505af11580156123ce573d6000803e3d6000fd5b505050505050505050565b60008083610140015160018111156123f3576123f3613311565b14801561241657506000826101400151600181111561241457612414613311565b145b156124235750600161082a565b6001836101400151600181111561243c5761243c613311565b14801561245f57506001826101400151600181111561245d5761245d613311565b145b1561246c5750600261082a565b50600092915050565b61247f83836127e0565b61249c57604051633fcd37a360e11b815260040160405180910390fd5b60008160028111156124b0576124b0613311565b036124dd578160800151836080015114610ac55760405163a0b9446560e01b815260040160405180910390fd5b610ac583608001518360800151610d8f565b6124fb8530868a611bed565b612508878786868661282a565b8561251284611de4565b1015612531576040516301be9b0160e71b815260040160405180910390fd5b61254130868561164a858b613411565b61254d30338584611d88565b50505050505050565b600080825160410361258c5760208301516040840151606085015160001a612580878285856128b2565b94509450505050612594565b506000905060025b9250929050565b60008160048111156125af576125af613311565b036125b75750565b60018160048111156125cb576125cb613311565b036126185760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610d19565b600281600481111561262c5761262c613311565b036126795760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610d19565b600381600481111561268d5761268d613311565b036109835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610d19565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611c115760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610d19565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806114f35760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610d19565b60008260c00151600014806127f7575060c0820151155b156128045750600161082a565b61178f61281084612976565b61281984612976565b856101400151856101400151612990565b600081600281111561283e5761283e613311565b146114f357600181600281111561285757612857613311565b0361287d576000828152600560205260409020600101546128789085612a2a565b6114f3565b600281600281111561289157612891613311565b036114f3576000838152600560205260409020600101546128789086612b35565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128e9575060009050600361296d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561293d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129665760006001925092505061296d565b9150600090505b94509492505050565b600061082a8260a001518360c0015184610140015161217c565b6000808360018111156129a5576129a5613311565b036129e95760008260018111156129be576129be613311565b036129df57670de0b6b3a76400006129d685876133f9565b101590506119d6565b50828410156119d6565b60008260018111156129fd576129fd613311565b03612a0c5750838310156119d6565b670de0b6b3a7640000612a1f85876133f9565b111595945050505050565b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612a6057612a606133cd565b602002602001018181525050600281600181518110612a8157612a816133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160e01b031960e084901b168152612b079190600090889087908990600401613549565b600060405180830381600087803b158015612b2157600080fd5b505af115801561254d573d6000803e3d6000fd5b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612b6b57612b6b6133cd565b602002602001018181525050600281600181518110612b8c57612b8c6133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e7212ad7f0000000000000000000000000000000000000000000000000000000000000000612add565b600060208284031215612bfe57600080fd5b81356001600160e01b03198116811461178f57600080fd5b6001600160a01b038116811461098357600080fd5b8035612c3681612c16565b919050565b60008060408385031215612c4e57600080fd5b8235612c5981612c16565b946020939093013593505050565b600060208284031215612c7957600080fd5b813561178f81612c16565b600060208284031215612c9657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b0381118282101715612cd657612cd6612c9d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612d0457612d04612c9d565b604052919050565b803560028110612c3657600080fd5b803560038110612c3657600080fd5b600082601f830112612d3b57600080fd5b81356001600160401b03811115612d5457612d54612c9d565b612d67601f8201601f1916602001612cdc565b818152846020838601011115612d7c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a08284031215612dac57600080fd5b612db4612cb3565b905081358152612dc660208301612c2b565b6020820152612dd760408301612c2b565b6040820152612de860608301612c2b565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140612e3b818401612d0c565b90820152610160612e4d838201612d1b565b90820152610180828101356001600160401b03811115612e6c57600080fd5b612e7885828601612d2a565b82840152505092915050565b600060208284031215612e9657600080fd5b81356001600160401b03811115612eac57600080fd5b6119d684828501612d99565b600080600060608486031215612ecd57600080fd5b505081359360208301359350604090920135919050565b60006001600160401b03821115612efd57612efd612c9d565b5060051b60200190565b600082601f830112612f1857600080fd5b81356020612f2d612f2883612ee4565b612cdc565b82815260059290921b84018101918181019086841115612f4c57600080fd5b8286015b84811015612f675780358352918301918301612f50565b509695505050505050565b600080600080600060a08688031215612f8a57600080fd5b8535612f9581612c16565b94506020860135612fa581612c16565b935060408601356001600160401b0380821115612fc157600080fd5b612fcd89838a01612f07565b94506060880135915080821115612fe357600080fd5b612fef89838a01612f07565b9350608088013591508082111561300557600080fd5b5061301288828901612d2a565b9150509295509295909350565b600082601f83011261303057600080fd5b81356020613040612f2883612ee4565b82815260059290921b8401810191818101908684111561305f57600080fd5b8286015b84811015612f675780356001600160401b038111156130825760008081fd5b6130908986838b0101612d99565b845250918301918301613063565b600080604083850312156130b157600080fd5b82356001600160401b03808211156130c857600080fd5b6130d48683870161301f565b935060208501359150808211156130ea57600080fd5b506130f785828601612f07565b9150509250929050565b6000806040838503121561311457600080fd5b50508035926020909101359150565b6000806040838503121561313657600080fd5b8235915060208301356001600160401b0381111561315357600080fd5b6130f785828601612d99565b6000806000806080858703121561317557600080fd5b84356001600160401b038082111561318c57600080fd5b61319888838901612d99565b955060208701359150808211156131ae57600080fd5b6131ba8883890161301f565b94506040870135935060608701359150808211156131d757600080fd5b506131e487828801612f07565b91505092959194509250565b600080600080600060a0868803121561320857600080fd5b853561321381612c16565b9450602086013561322381612c16565b9350604086013592506060860135915060808601356001600160401b0381111561324c57600080fd5b61301288828901612d2a565b60006020828403121561326a57600080fd5b81356001600160401b0381111561328057600080fd5b6119d68482850161301f565b6000806040838503121561329f57600080fd5b82356001600160401b038111156132b557600080fd5b6132c185828601612d99565b95602094909401359450505050565b6000602082840312156132e257600080fd5b815161178f81612c16565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b6003811061333757613337613311565b9052565b8d8152602081018d90526001600160a01b038c811660408301528b811660608301528a16608082015260a0810189905260c0810188905260e081018790526101008101869052610120810185905261014081018490526101a08101600284106133a6576133a6613311565b836101608301526133bb610180830184613327565b9e9d5050505050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561340c5761340c6133e3565b500190565b600082821015613423576134236133e3565b500390565b60005b8381101561344357818101518382015260200161342b565b83811115611c115750506000910152565b60008351613466818460208801613428565b83519083019061347a818360208801613428565b01949350505050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60008160001904831182151516156134d6576134d66133e3565b500290565b6000826134f857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561350f57600080fd5b5051919050565b6020815260008251806020840152613535816040850160208701613428565b601f01601f19169190910160400192915050565b6001600160a01b038616815260208082018690526040820185905260a06060830181905284519083018190526000918581019160c0850190845b8181101561359f57845183529383019391830191600101613583565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a2646970667358221220d93139e32bae530b273044d07d00326d19debeb5b49b08f172b04a7bc677797964736f6c634300080f00330000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa841740000000000000000000000004d97dcd97ec945f40cf65f87097ace5ea0476045000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x1107e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x110f1\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x7d3c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x84d2\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [],\n  \"libraries\": [],\n  \"pending\": [],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/137/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\"\n    }\n  },\n  \"timestamp\": 1663958850,\n  \"commit\": \"ec7c23f\"\n}"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/137/deployExchange-1663958971.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": \"0xf7f61cb1ce8e09f9652e85c6ef1196f7225a40221a473d89c117108101f31b8e\",\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n        \"0x4D97DCd97eC945f40cF65F87097ACe5EA0476045\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"gas\": \"0x41072e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b5060405162003b6538038062003b658339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e051610100516101205161014051610160516101805161375e62000407600039600061079e01526000818161043401528181611e9a0152818161206e01528181612a8e0152612b9901526000818161055701528181611e0b0152818161202301528181612abd0152612bc801526000611ac901526000611b1801526000611af301526000611a4c01526000611a7601526000611aa0015261375e6000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80637048027511610182578063d798eff6116100e9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610799578063fa950b48146107c0578063fbddd751146107d3578063fe729aaf146107e657600080fd5b8063e60f0c0514610754578063edef7d8e14610767578063f23a6e611461077a57600080fd5b8063d798eff6146106dd578063d7fb272f146106f0578063d82da83814610713578063e03ac3d014610726578063e2eec4051461072e578063e50e4f971461074157600080fd5b8063a287bdf11161013b578063a287bdf114610654578063a6dfcf8614610667578063ac8a584a1461067a578063b28c51c01461068d578063bc197c811461069e578063c10f1a75146106ca57600080fd5b806370480275146105e257806375d7370a146105f55780637ecebe001461060657806383b8a5ae146106265780639870d7fe1461062e578063a10f3dce1461064157600080fd5b8063429b62e5116102415780635893253c116101fa578063627cdcb9116101d4578063627cdcb914610588578063654f0ce41461059057806368c7450f146105a35780636d70f7ae146105b657600080fd5b80635893253c146105195780635c1548fb146105555780635c975abb1461057b57600080fd5b8063429b62e51461046057806344bea37e146104805780634544f05514610488578063456068d21461049b57806346423aa7146104a35780634a2a11f51461051157600080fd5b80631785f53c116102935780631785f53c1461039b57806324d7806c146103ae5780632dff692d146103db578063346009011461041f5780633b521d78146104325780633d6d35981461045857600080fd5b806301ffc9a7146102db5780630647ee201461030357806306b9d691146103305780631031e36e14610350578063131e7e1c1461035a57806313e7c9d81461036d575b600080fd5b6102ee6102e9366004612bec565b6107f9565b60405190151581526020015b60405180910390f35b6102ee610311366004612c3b565b6001600160a01b03919091166000908152600460205260409020541490565b610338610830565b6040516001600160a01b0390911681526020016102fa565b6103586108a3565b005b600754610338906001600160a01b031681565b61038d61037b366004612c67565b60026020526000908152604090205481565b6040519081526020016102fa565b6103586103a9366004612c67565b6108de565b6102ee6103bc366004612c67565b6001600160a01b03166000908152600160208190526040909120541490565b6104086103e9366004612c84565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016102fa565b61035861042d366004612c84565b610955565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b610358610986565b61038d61046e366004612c67565b60016020526000908152604090205481565b61038d600081565b610358610496366004612c67565b6109f1565b610358610a2b565b6104f46104b1366004612c84565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b6040805182511515815260209283015192810192909252016102fa565b6103e861038d565b610540610527366004612c84565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016102fa565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b6003546102ee9060ff1681565b610358610a64565b61035861059e366004612e84565b610a6e565b6103586105b1366004612eb8565b610a89565b6102ee6105c4366004612c67565b6001600160a01b031660009081526002602052604090205460011490565b6103586105f0366004612c67565b610aca565b6007546001600160a01b0316610338565b61038d610614366004612c67565b60046020526000908152604090205481565b610358610b44565b61035861063c366004612c67565b610bb0565b61038d61064f366004612c84565b610c28565b610338610662366004612c67565b610c46565b610358610675366004612e84565b610c65565b610358610688366004612c67565b610c6e565b6006546001600160a01b0316610338565b6106b16106ac366004612f72565b610ce5565b6040516001600160e01b031990911681526020016102fa565b600654610338906001600160a01b031681565b6103586106eb36600461309e565b610cf7565b61038d6106fe366004612c84565b60009081526005602052604090206001015490565b610358610721366004613101565b610d8f565b610338610db7565b61035861073c366004613123565b610e01565b61038d61074f366004612e84565b610e3d565b61035861076236600461315f565b610eda565b610338610775366004612c67565b610f6c565b6106b16107883660046131f0565b63f23a6e6160e01b95945050505050565b61038d7f000000000000000000000000000000000000000000000000000000000000000081565b6103586107ce366004613258565b610f8b565b6103586107e1366004612c67565b610fc2565b6103586107f436600461328c565b610ffc565b60006001600160e01b03198216630271189760e51b148061082a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546040805163557887a160e11b815290516000926001600160a01b03169163aaf10f429160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e91906132d0565b905090565b33600090815260016020819052604090912054146108d457604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611082565b565b336000908152600160208190526040909120541461090f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610983576040516307ed98ed60e31b815260040160405180910390fd5b50565b336000908152600260205260409020546001146109b657604051631f0853c160e21b815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610a2257604051637bfa4b9f60e01b815260040160405180910390fd5b610983816110bc565b3360009081526001602081905260409091205414610a5c57604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611118565b6108dc600161114f565b6000610a7982610e3d565b9050610a85818361117d565b5050565b3360009081526001602081905260409091205414610aba57604051637bfa4b9f60e01b815260040160405180910390fd5b610ac583838361126b565b505050565b3360009081526001602081905260409091205414610afb57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610b7557604051637bfa4b9f60e01b815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610be157604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610c3382610955565b5060009081526005602052604090205490565b600061082a82610c54610db7565b6007546001600160a01b0316611395565b610983816113f9565b3360009081526001602081905260409091205414610c9f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b63bc197c8160e01b5b95945050505050565b600054600203610d225760405162461bcd60e51b8152600401610d19906132ed565b60405180910390fd5b600260008181553381526020919091526040902054600114610d5757604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610d7b576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336114a1565b50506001600055565b80610d9983610c28565b14610a855760405163337c310560e11b815260040160405180910390fd5b6007546040805163530ca43760e11b815290516000926001600160a01b03169163a619486e9160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b610e2081604001518260200151848461018001518561016001516114fa565b610a8557604051638baa579f60e01b815260040160405180910390fd5b600061082a7fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e6101600151604051602001610ebf9d9c9b9a9998979695949392919061333b565b60405160208183030381529060405280519060200120611558565b600054600203610efc5760405162461bcd60e51b8152600401610d19906132ed565b600260008181553381526020919091526040902054600114610f3157604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610f55576040516313d0ff5960e31b815260040160405180910390fd5b610f61848484846115a6565b505060016000555050565b600061082a82610f7a610830565b6006546001600160a01b0316611747565b805160005b81811015610ac557610fba838281518110610fad57610fad6133cd565b60200260200101516113f9565b600101610f90565b3360009081526001602081905260409091205414610ff357604051637bfa4b9f60e01b815260040160405180910390fd5b61098381611796565b60005460020361101e5760405162461bcd60e51b8152600401610d19906132ed565b60026000818155338152602091909152604090205460011461105357604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615611077576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336117f2565b6003805460ff1916600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b6007546040516001600160a01b038084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6003805460ff1916905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b3360009081526004602052604090205461116a9082906133f9565b3360009081526004602052604090205550565b60008160e001511180156111945750428160e00151105b156111b2576040516362b439dd60e11b815260040160405180910390fd5b6111bc8282610e01565b6103e881610120015111156111e45760405163cd4e616760e01b815260040160405180910390fd5b6111f18160800151610955565b60008281526008602052604090205460ff161561122157604051633d9c5bb760e11b815260040160405180910390fd5b61124e81602001518261010001516001600160a01b03919091166000908152600460205260409020541490565b610a8557604051633ab3447f60e11b815260040160405180910390fd5b8183148061127f575082158061127f575081155b1561129d576040516307ed98ed60e31b815260040160405180910390fd5b6000838152600560205260409020541515806112c6575060008281526005602052604090205415155b156112e457604051630ea075bf60e21b815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b6000806113a184611905565b8051906020012090506000856040516020016113cc91906001600160a01b0391909116815260200190565b6040516020818303038152906040528051906020012090506113ef84838361196b565b9695505050505050565b60208101516001600160a01b03163314611426576040516330cd747160e01b815260040160405180910390fd5b600061143182610e3d565b600081815260086020526040902080549192509060ff161561146657604051633d9c5bb760e11b815260040160405180910390fd5b805460ff1916600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b818110156114f3576114eb8582815181106114c3576114c36133cd565b60200260200101518583815181106114dd576114dd6133cd565b6020026020010151856117f2565b6001016114a6565b5050505050565b60008082600281111561150f5761150f613311565b0361152757611520868686866119aa565b9050610cee565b600282600281111561153b5761153b613311565b0361154c57611520868686866119de565b61152086868686611a18565b600061082a611565611a3f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080806115b58885611b66565b9250925092506000806115c78a611bb6565b915091506115db8a60200151308489611bed565b6115e68a8a89611c17565b6115f08582611c69565b6101208b015190955060009061163290828d6101400151600181111561161857611618613311565b146116235788611625565b875b89898f6101400151611c98565b905061164f308c6020015184848a61164a9190613411565b611bed565b61165b30338484611d88565b60208b810151604080518681529283018590528201899052606082018790526080820183905230916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a46020808c0151604080518681529283018590528201899052606082018890526001600160a01b03169085907f63bf4d16b7fa898ef4c4b2b6d90fd201e9c56313b65638af6088d149d2ce956c9060800160405180910390a3600061172184611de4565b9050801561173957611739308d602001518684611bed565b505050505050505050505050565b6040516bffffffffffffffffffffffff19606085901b16602082015260009061178c908390859060340160405160208183030381529060405280519060200120611ec8565b90505b9392505050565b6006546040516001600160a01b038084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b81600080806118018785611b66565b925092509250600061185e8861012001516000600181111561182557611825613311565b8a6101400151600181111561183c5761183c613311565b146118475786611849565b855b8a60a001518b60c001518c6101400151611c98565b905060008061186c8a611bb6565b91509150611886338b6020015183868a61164a9190613411565b6118968a6020015189848a611bed565b60208a810151604080518581529283018490528201899052606082018790526080820185905233916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a450505050505050505050565b6060604051806101a0016040528061017181526020016135b86101719139604080516001600160a01b03851660208201520160408051601f19818403018152908290526119559291602001613454565b6040516020818303038152906040529050919050565b60008060ff60f81b8584866040516020016119899493929190613483565b60408051808303601f19018152919052805160209091012095945050505050565b6000836001600160a01b0316856001600160a01b03161480156119d357506119d3858484611f1d565b90505b949350505050565b60006119eb858484611f1d565b80156119d35750836001600160a01b0316611a0586610c46565b6001600160a01b03161495945050505050565b6000611a25858484611f1d565b80156119d35750836001600160a01b0316611a0586610f6c565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a9857507f000000000000000000000000000000000000000000000000000000000000000046145b15611ac257507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806000611b788560600151611f45565b611b8185610e3d565b9050611b8d818661117d565b611ba0848660a001518760c00151611f84565b9250611bad818686611fab565b91509250925092565b600080808361014001516001811115611bd157611bd1613311565b03611be157505060800151600091565b50506080015190600090565b81600003611c0557611c00848483612021565b611c11565b611c1184848484612069565b50505050565b815160005b818110156114f357611c6185858381518110611c3a57611c3a6133cd565b6020026020010151858481518110611c5457611c546133cd565b6020026020010151612096565b600101611c1c565b600080611c7583611de4565b90508381101561178f576040516301be9b0160e71b815260040160405180910390fd5b60008515610cee576000611cad85858561217c565b9050600081118015611cc75750670de0b6b3a76400008111155b15611d7e576000836001811115611ce057611ce0613311565b03611d3257611cf1612710826134bc565b86611d0d83611d0881670de0b6b3a7640000613411565b6121eb565b611d17908a6134bc565b611d2191906134bc565b611d2b91906134db565b9150611d7e565b611d46670de0b6b3a76400006127106134bc565b86611d5d83611d0881670de0b6b3a7640000613411565b611d67908a6134bc565b611d7191906134bc565b611d7b91906134db565b91505b5095945050505050565b8015611c1157611d9a84848484611bed565b60408051838152602081018390526001600160a01b038516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b600081600003611e77576040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015611e53573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082a91906134fd565b604051627eeac760e11b8152306004820152602481018390526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90604401611e36565b600080611ed58585612201565b805190602001209050600060ff60f81b868584604051602001611efb9493929190613483565b60408051808303601f1901815291905280516020909101209695505050505050565b6000836001600160a01b0316611f338484612318565b6001600160a01b031614949350505050565b6001600160a01b03811615801590611f6657506001600160a01b0381163314155b1561098357604051635211a07960e01b815260040160405180910390fd5b600082600003611f965750600061178f565b82611fa183866134bc565b61178c91906134db565b60008381526008602052604090206001810154908115611fcb5781611fd1565b8360a001515b915081831115611ff457604051637166356b60e11b815260040160405180910390fd5b611ffe8383613411565b91508160000361201457805460ff191660011781555b6001018190559392505050565b7f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b0385160361205d57611c0081848461233c565b611c1181858585612347565b611c117f000000000000000000000000000000000000000000000000000000000000000085858585612353565b60006120a284846123d9565b90506120af848483612475565b81600080806120be8785611b66565b92509250925060006120e28861012001516000600181111561182557611825613311565b90506000806120f08a611bb6565b9150915061210787878c6020015185858d896124ef565b6020808c01518b8201516040805186815293840185905283018a905260608301889052608083018690526001600160a01b039182169291169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a45050505050505050505050565b60008082600181111561219157612191613311565b036121c957826000036121a55760006121c2565b826121b8670de0b6b3a7640000866134bc565b6121c291906134db565b905061178f565b836000036121d857600061178c565b83611fa1670de0b6b3a7640000856134bc565b60008183106121fa578161178f565b5090919050565b60408051600080825260208201909252606091906122229060448101613516565b60408051601f19818403018152918152602080830180516001600160e01b03166352e831dd60e01b1790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe6020820152600160601b8502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be6041820152600160601b840260608201526e5af43d82803e903d91602b57fd5bf360881b607482015280826040516020016122ff929190613454565b6040516020818303038152906040529250505092915050565b60008060006123278585612556565b915091506123348161259b565b509392505050565b610ac58383836126e5565b611c118484848461275d565b604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b1580156123ba57600080fd5b505af11580156123ce573d6000803e3d6000fd5b505050505050505050565b60008083610140015160018111156123f3576123f3613311565b14801561241657506000826101400151600181111561241457612414613311565b145b156124235750600161082a565b6001836101400151600181111561243c5761243c613311565b14801561245f57506001826101400151600181111561245d5761245d613311565b145b1561246c5750600261082a565b50600092915050565b61247f83836127e0565b61249c57604051633fcd37a360e11b815260040160405180910390fd5b60008160028111156124b0576124b0613311565b036124dd578160800151836080015114610ac55760405163a0b9446560e01b815260040160405180910390fd5b610ac583608001518360800151610d8f565b6124fb8530868a611bed565b612508878786868661282a565b8561251284611de4565b1015612531576040516301be9b0160e71b815260040160405180910390fd5b61254130868561164a858b613411565b61254d30338584611d88565b50505050505050565b600080825160410361258c5760208301516040840151606085015160001a612580878285856128b2565b94509450505050612594565b506000905060025b9250929050565b60008160048111156125af576125af613311565b036125b75750565b60018160048111156125cb576125cb613311565b036126185760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610d19565b600281600481111561262c5761262c613311565b036126795760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610d19565b600381600481111561268d5761268d613311565b036109835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610d19565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611c115760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610d19565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806114f35760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610d19565b60008260c00151600014806127f7575060c0820151155b156128045750600161082a565b61178f61281084612976565b61281984612976565b856101400151856101400151612990565b600081600281111561283e5761283e613311565b146114f357600181600281111561285757612857613311565b0361287d576000828152600560205260409020600101546128789085612a2a565b6114f3565b600281600281111561289157612891613311565b036114f3576000838152600560205260409020600101546128789086612b35565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128e9575060009050600361296d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561293d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129665760006001925092505061296d565b9150600090505b94509492505050565b600061082a8260a001518360c0015184610140015161217c565b6000808360018111156129a5576129a5613311565b036129e95760008260018111156129be576129be613311565b036129df57670de0b6b3a76400006129d685876133f9565b101590506119d6565b50828410156119d6565b60008260018111156129fd576129fd613311565b03612a0c5750838310156119d6565b670de0b6b3a7640000612a1f85876133f9565b111595945050505050565b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612a6057612a606133cd565b602002602001018181525050600281600181518110612a8157612a816133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160e01b031960e084901b168152612b079190600090889087908990600401613549565b600060405180830381600087803b158015612b2157600080fd5b505af115801561254d573d6000803e3d6000fd5b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612b6b57612b6b6133cd565b602002602001018181525050600281600181518110612b8c57612b8c6133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e7212ad7f0000000000000000000000000000000000000000000000000000000000000000612add565b600060208284031215612bfe57600080fd5b81356001600160e01b03198116811461178f57600080fd5b6001600160a01b038116811461098357600080fd5b8035612c3681612c16565b919050565b60008060408385031215612c4e57600080fd5b8235612c5981612c16565b946020939093013593505050565b600060208284031215612c7957600080fd5b813561178f81612c16565b600060208284031215612c9657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b0381118282101715612cd657612cd6612c9d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612d0457612d04612c9d565b604052919050565b803560028110612c3657600080fd5b803560038110612c3657600080fd5b600082601f830112612d3b57600080fd5b81356001600160401b03811115612d5457612d54612c9d565b612d67601f8201601f1916602001612cdc565b818152846020838601011115612d7c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a08284031215612dac57600080fd5b612db4612cb3565b905081358152612dc660208301612c2b565b6020820152612dd760408301612c2b565b6040820152612de860608301612c2b565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140612e3b818401612d0c565b90820152610160612e4d838201612d1b565b90820152610180828101356001600160401b03811115612e6c57600080fd5b612e7885828601612d2a565b82840152505092915050565b600060208284031215612e9657600080fd5b81356001600160401b03811115612eac57600080fd5b6119d684828501612d99565b600080600060608486031215612ecd57600080fd5b505081359360208301359350604090920135919050565b60006001600160401b03821115612efd57612efd612c9d565b5060051b60200190565b600082601f830112612f1857600080fd5b81356020612f2d612f2883612ee4565b612cdc565b82815260059290921b84018101918181019086841115612f4c57600080fd5b8286015b84811015612f675780358352918301918301612f50565b509695505050505050565b600080600080600060a08688031215612f8a57600080fd5b8535612f9581612c16565b94506020860135612fa581612c16565b935060408601356001600160401b0380821115612fc157600080fd5b612fcd89838a01612f07565b94506060880135915080821115612fe357600080fd5b612fef89838a01612f07565b9350608088013591508082111561300557600080fd5b5061301288828901612d2a565b9150509295509295909350565b600082601f83011261303057600080fd5b81356020613040612f2883612ee4565b82815260059290921b8401810191818101908684111561305f57600080fd5b8286015b84811015612f675780356001600160401b038111156130825760008081fd5b6130908986838b0101612d99565b845250918301918301613063565b600080604083850312156130b157600080fd5b82356001600160401b03808211156130c857600080fd5b6130d48683870161301f565b935060208501359150808211156130ea57600080fd5b506130f785828601612f07565b9150509250929050565b6000806040838503121561311457600080fd5b50508035926020909101359150565b6000806040838503121561313657600080fd5b8235915060208301356001600160401b0381111561315357600080fd5b6130f785828601612d99565b6000806000806080858703121561317557600080fd5b84356001600160401b038082111561318c57600080fd5b61319888838901612d99565b955060208701359150808211156131ae57600080fd5b6131ba8883890161301f565b94506040870135935060608701359150808211156131d757600080fd5b506131e487828801612f07565b91505092959194509250565b600080600080600060a0868803121561320857600080fd5b853561321381612c16565b9450602086013561322381612c16565b9350604086013592506060860135915060808601356001600160401b0381111561324c57600080fd5b61301288828901612d2a565b60006020828403121561326a57600080fd5b81356001600160401b0381111561328057600080fd5b6119d68482850161301f565b6000806040838503121561329f57600080fd5b82356001600160401b038111156132b557600080fd5b6132c185828601612d99565b95602094909401359450505050565b6000602082840312156132e257600080fd5b815161178f81612c16565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b6003811061333757613337613311565b9052565b8d8152602081018d90526001600160a01b038c811660408301528b811660608301528a16608082015260a0810189905260c0810188905260e081018790526101008101869052610120810185905261014081018490526101a08101600284106133a6576133a6613311565b836101608301526133bb610180830184613327565b9e9d5050505050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561340c5761340c6133e3565b500190565b600082821015613423576134236133e3565b500390565b60005b8381101561344357818101518382015260200161342b565b83811115611c115750506000910152565b60008351613466818460208801613428565b83519083019061347a818360208801613428565b01949350505050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60008160001904831182151516156134d6576134d66133e3565b500290565b6000826134f857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561350f57600080fd5b5051919050565b6020815260008251806020840152613535816040850160208701613428565b601f01601f19169190910160400192915050565b6001600160a01b038616815260208082018690526040820185905260a06060830181905284519083018190526000918581019160c0850190845b8181101561359f57845183529383019391830191600101613583565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a2646970667358221220d93139e32bae530b273044d07d00326d19debeb5b49b08f172b04a7bc677797964736f6c634300080f00330000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa841740000000000000000000000004d97dcd97ec945f40cf65f87097ace5ea0476045000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x9084668eccf2c9fbf05d49323b5fd6de7a2578a01a7c817de9ac34d128d081ba\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x1107e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x022d727a4c8ecdaa9e0aee5e5ef1a6ade286ea48052db6a2d76d949f3122273d\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x110f1\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0xa035304622733ecdf80c9226c65241b683d839ffb278a25bd3ca1cdc2ab24ecb\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x7d3c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x212ec4c121617c2cf0ce56ebca9bc28da53ebcb6f8c8cb6fb2e810fd8e7a4e26\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x84d2\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [],\n  \"libraries\": [],\n  \"pending\": [\n    \"0xf7f61cb1ce8e09f9652e85c6ef1196f7225a40221a473d89c117108101f31b8e\",\n    \"0x9084668eccf2c9fbf05d49323b5fd6de7a2578a01a7c817de9ac34d128d081ba\",\n    \"0x022d727a4c8ecdaa9e0aee5e5ef1a6ade286ea48052db6a2d76d949f3122273d\",\n    \"0xa035304622733ecdf80c9226c65241b683d839ffb278a25bd3ca1cdc2ab24ecb\",\n    \"0x212ec4c121617c2cf0ce56ebca9bc28da53ebcb6f8c8cb6fb2e810fd8e7a4e26\"\n  ],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/137/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\"\n    }\n  },\n  \"timestamp\": 1663958971,\n  \"commit\": \"ec7c23f\"\n}"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/137/deployExchange-1663958977.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": \"0xf7f61cb1ce8e09f9652e85c6ef1196f7225a40221a473d89c117108101f31b8e\",\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n        \"0x4D97DCd97eC945f40cF65F87097ACe5EA0476045\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"gas\": \"0x41072e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b5060405162003b6538038062003b658339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e051610100516101205161014051610160516101805161375e62000407600039600061079e01526000818161043401528181611e9a0152818161206e01528181612a8e0152612b9901526000818161055701528181611e0b0152818161202301528181612abd0152612bc801526000611ac901526000611b1801526000611af301526000611a4c01526000611a7601526000611aa0015261375e6000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80637048027511610182578063d798eff6116100e9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610799578063fa950b48146107c0578063fbddd751146107d3578063fe729aaf146107e657600080fd5b8063e60f0c0514610754578063edef7d8e14610767578063f23a6e611461077a57600080fd5b8063d798eff6146106dd578063d7fb272f146106f0578063d82da83814610713578063e03ac3d014610726578063e2eec4051461072e578063e50e4f971461074157600080fd5b8063a287bdf11161013b578063a287bdf114610654578063a6dfcf8614610667578063ac8a584a1461067a578063b28c51c01461068d578063bc197c811461069e578063c10f1a75146106ca57600080fd5b806370480275146105e257806375d7370a146105f55780637ecebe001461060657806383b8a5ae146106265780639870d7fe1461062e578063a10f3dce1461064157600080fd5b8063429b62e5116102415780635893253c116101fa578063627cdcb9116101d4578063627cdcb914610588578063654f0ce41461059057806368c7450f146105a35780636d70f7ae146105b657600080fd5b80635893253c146105195780635c1548fb146105555780635c975abb1461057b57600080fd5b8063429b62e51461046057806344bea37e146104805780634544f05514610488578063456068d21461049b57806346423aa7146104a35780634a2a11f51461051157600080fd5b80631785f53c116102935780631785f53c1461039b57806324d7806c146103ae5780632dff692d146103db578063346009011461041f5780633b521d78146104325780633d6d35981461045857600080fd5b806301ffc9a7146102db5780630647ee201461030357806306b9d691146103305780631031e36e14610350578063131e7e1c1461035a57806313e7c9d81461036d575b600080fd5b6102ee6102e9366004612bec565b6107f9565b60405190151581526020015b60405180910390f35b6102ee610311366004612c3b565b6001600160a01b03919091166000908152600460205260409020541490565b610338610830565b6040516001600160a01b0390911681526020016102fa565b6103586108a3565b005b600754610338906001600160a01b031681565b61038d61037b366004612c67565b60026020526000908152604090205481565b6040519081526020016102fa565b6103586103a9366004612c67565b6108de565b6102ee6103bc366004612c67565b6001600160a01b03166000908152600160208190526040909120541490565b6104086103e9366004612c84565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016102fa565b61035861042d366004612c84565b610955565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b610358610986565b61038d61046e366004612c67565b60016020526000908152604090205481565b61038d600081565b610358610496366004612c67565b6109f1565b610358610a2b565b6104f46104b1366004612c84565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b6040805182511515815260209283015192810192909252016102fa565b6103e861038d565b610540610527366004612c84565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016102fa565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b6003546102ee9060ff1681565b610358610a64565b61035861059e366004612e84565b610a6e565b6103586105b1366004612eb8565b610a89565b6102ee6105c4366004612c67565b6001600160a01b031660009081526002602052604090205460011490565b6103586105f0366004612c67565b610aca565b6007546001600160a01b0316610338565b61038d610614366004612c67565b60046020526000908152604090205481565b610358610b44565b61035861063c366004612c67565b610bb0565b61038d61064f366004612c84565b610c28565b610338610662366004612c67565b610c46565b610358610675366004612e84565b610c65565b610358610688366004612c67565b610c6e565b6006546001600160a01b0316610338565b6106b16106ac366004612f72565b610ce5565b6040516001600160e01b031990911681526020016102fa565b600654610338906001600160a01b031681565b6103586106eb36600461309e565b610cf7565b61038d6106fe366004612c84565b60009081526005602052604090206001015490565b610358610721366004613101565b610d8f565b610338610db7565b61035861073c366004613123565b610e01565b61038d61074f366004612e84565b610e3d565b61035861076236600461315f565b610eda565b610338610775366004612c67565b610f6c565b6106b16107883660046131f0565b63f23a6e6160e01b95945050505050565b61038d7f000000000000000000000000000000000000000000000000000000000000000081565b6103586107ce366004613258565b610f8b565b6103586107e1366004612c67565b610fc2565b6103586107f436600461328c565b610ffc565b60006001600160e01b03198216630271189760e51b148061082a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546040805163557887a160e11b815290516000926001600160a01b03169163aaf10f429160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e91906132d0565b905090565b33600090815260016020819052604090912054146108d457604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611082565b565b336000908152600160208190526040909120541461090f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610983576040516307ed98ed60e31b815260040160405180910390fd5b50565b336000908152600260205260409020546001146109b657604051631f0853c160e21b815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610a2257604051637bfa4b9f60e01b815260040160405180910390fd5b610983816110bc565b3360009081526001602081905260409091205414610a5c57604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611118565b6108dc600161114f565b6000610a7982610e3d565b9050610a85818361117d565b5050565b3360009081526001602081905260409091205414610aba57604051637bfa4b9f60e01b815260040160405180910390fd5b610ac583838361126b565b505050565b3360009081526001602081905260409091205414610afb57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610b7557604051637bfa4b9f60e01b815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610be157604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610c3382610955565b5060009081526005602052604090205490565b600061082a82610c54610db7565b6007546001600160a01b0316611395565b610983816113f9565b3360009081526001602081905260409091205414610c9f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b63bc197c8160e01b5b95945050505050565b600054600203610d225760405162461bcd60e51b8152600401610d19906132ed565b60405180910390fd5b600260008181553381526020919091526040902054600114610d5757604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610d7b576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336114a1565b50506001600055565b80610d9983610c28565b14610a855760405163337c310560e11b815260040160405180910390fd5b6007546040805163530ca43760e11b815290516000926001600160a01b03169163a619486e9160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b610e2081604001518260200151848461018001518561016001516114fa565b610a8557604051638baa579f60e01b815260040160405180910390fd5b600061082a7fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e6101600151604051602001610ebf9d9c9b9a9998979695949392919061333b565b60405160208183030381529060405280519060200120611558565b600054600203610efc5760405162461bcd60e51b8152600401610d19906132ed565b600260008181553381526020919091526040902054600114610f3157604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610f55576040516313d0ff5960e31b815260040160405180910390fd5b610f61848484846115a6565b505060016000555050565b600061082a82610f7a610830565b6006546001600160a01b0316611747565b805160005b81811015610ac557610fba838281518110610fad57610fad6133cd565b60200260200101516113f9565b600101610f90565b3360009081526001602081905260409091205414610ff357604051637bfa4b9f60e01b815260040160405180910390fd5b61098381611796565b60005460020361101e5760405162461bcd60e51b8152600401610d19906132ed565b60026000818155338152602091909152604090205460011461105357604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615611077576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336117f2565b6003805460ff1916600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b6007546040516001600160a01b038084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6003805460ff1916905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b3360009081526004602052604090205461116a9082906133f9565b3360009081526004602052604090205550565b60008160e001511180156111945750428160e00151105b156111b2576040516362b439dd60e11b815260040160405180910390fd5b6111bc8282610e01565b6103e881610120015111156111e45760405163cd4e616760e01b815260040160405180910390fd5b6111f18160800151610955565b60008281526008602052604090205460ff161561122157604051633d9c5bb760e11b815260040160405180910390fd5b61124e81602001518261010001516001600160a01b03919091166000908152600460205260409020541490565b610a8557604051633ab3447f60e11b815260040160405180910390fd5b8183148061127f575082158061127f575081155b1561129d576040516307ed98ed60e31b815260040160405180910390fd5b6000838152600560205260409020541515806112c6575060008281526005602052604090205415155b156112e457604051630ea075bf60e21b815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b6000806113a184611905565b8051906020012090506000856040516020016113cc91906001600160a01b0391909116815260200190565b6040516020818303038152906040528051906020012090506113ef84838361196b565b9695505050505050565b60208101516001600160a01b03163314611426576040516330cd747160e01b815260040160405180910390fd5b600061143182610e3d565b600081815260086020526040902080549192509060ff161561146657604051633d9c5bb760e11b815260040160405180910390fd5b805460ff1916600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b818110156114f3576114eb8582815181106114c3576114c36133cd565b60200260200101518583815181106114dd576114dd6133cd565b6020026020010151856117f2565b6001016114a6565b5050505050565b60008082600281111561150f5761150f613311565b0361152757611520868686866119aa565b9050610cee565b600282600281111561153b5761153b613311565b0361154c57611520868686866119de565b61152086868686611a18565b600061082a611565611a3f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080806115b58885611b66565b9250925092506000806115c78a611bb6565b915091506115db8a60200151308489611bed565b6115e68a8a89611c17565b6115f08582611c69565b6101208b015190955060009061163290828d6101400151600181111561161857611618613311565b146116235788611625565b875b89898f6101400151611c98565b905061164f308c6020015184848a61164a9190613411565b611bed565b61165b30338484611d88565b60208b810151604080518681529283018590528201899052606082018790526080820183905230916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a46020808c0151604080518681529283018590528201899052606082018890526001600160a01b03169085907f63bf4d16b7fa898ef4c4b2b6d90fd201e9c56313b65638af6088d149d2ce956c9060800160405180910390a3600061172184611de4565b9050801561173957611739308d602001518684611bed565b505050505050505050505050565b6040516bffffffffffffffffffffffff19606085901b16602082015260009061178c908390859060340160405160208183030381529060405280519060200120611ec8565b90505b9392505050565b6006546040516001600160a01b038084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b81600080806118018785611b66565b925092509250600061185e8861012001516000600181111561182557611825613311565b8a6101400151600181111561183c5761183c613311565b146118475786611849565b855b8a60a001518b60c001518c6101400151611c98565b905060008061186c8a611bb6565b91509150611886338b6020015183868a61164a9190613411565b6118968a6020015189848a611bed565b60208a810151604080518581529283018490528201899052606082018790526080820185905233916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a450505050505050505050565b6060604051806101a0016040528061017181526020016135b86101719139604080516001600160a01b03851660208201520160408051601f19818403018152908290526119559291602001613454565b6040516020818303038152906040529050919050565b60008060ff60f81b8584866040516020016119899493929190613483565b60408051808303601f19018152919052805160209091012095945050505050565b6000836001600160a01b0316856001600160a01b03161480156119d357506119d3858484611f1d565b90505b949350505050565b60006119eb858484611f1d565b80156119d35750836001600160a01b0316611a0586610c46565b6001600160a01b03161495945050505050565b6000611a25858484611f1d565b80156119d35750836001600160a01b0316611a0586610f6c565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a9857507f000000000000000000000000000000000000000000000000000000000000000046145b15611ac257507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806000611b788560600151611f45565b611b8185610e3d565b9050611b8d818661117d565b611ba0848660a001518760c00151611f84565b9250611bad818686611fab565b91509250925092565b600080808361014001516001811115611bd157611bd1613311565b03611be157505060800151600091565b50506080015190600090565b81600003611c0557611c00848483612021565b611c11565b611c1184848484612069565b50505050565b815160005b818110156114f357611c6185858381518110611c3a57611c3a6133cd565b6020026020010151858481518110611c5457611c546133cd565b6020026020010151612096565b600101611c1c565b600080611c7583611de4565b90508381101561178f576040516301be9b0160e71b815260040160405180910390fd5b60008515610cee576000611cad85858561217c565b9050600081118015611cc75750670de0b6b3a76400008111155b15611d7e576000836001811115611ce057611ce0613311565b03611d3257611cf1612710826134bc565b86611d0d83611d0881670de0b6b3a7640000613411565b6121eb565b611d17908a6134bc565b611d2191906134bc565b611d2b91906134db565b9150611d7e565b611d46670de0b6b3a76400006127106134bc565b86611d5d83611d0881670de0b6b3a7640000613411565b611d67908a6134bc565b611d7191906134bc565b611d7b91906134db565b91505b5095945050505050565b8015611c1157611d9a84848484611bed565b60408051838152602081018390526001600160a01b038516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b600081600003611e77576040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015611e53573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082a91906134fd565b604051627eeac760e11b8152306004820152602481018390526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90604401611e36565b600080611ed58585612201565b805190602001209050600060ff60f81b868584604051602001611efb9493929190613483565b60408051808303601f1901815291905280516020909101209695505050505050565b6000836001600160a01b0316611f338484612318565b6001600160a01b031614949350505050565b6001600160a01b03811615801590611f6657506001600160a01b0381163314155b1561098357604051635211a07960e01b815260040160405180910390fd5b600082600003611f965750600061178f565b82611fa183866134bc565b61178c91906134db565b60008381526008602052604090206001810154908115611fcb5781611fd1565b8360a001515b915081831115611ff457604051637166356b60e11b815260040160405180910390fd5b611ffe8383613411565b91508160000361201457805460ff191660011781555b6001018190559392505050565b7f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b0385160361205d57611c0081848461233c565b611c1181858585612347565b611c117f000000000000000000000000000000000000000000000000000000000000000085858585612353565b60006120a284846123d9565b90506120af848483612475565b81600080806120be8785611b66565b92509250925060006120e28861012001516000600181111561182557611825613311565b90506000806120f08a611bb6565b9150915061210787878c6020015185858d896124ef565b6020808c01518b8201516040805186815293840185905283018a905260608301889052608083018690526001600160a01b039182169291169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a45050505050505050505050565b60008082600181111561219157612191613311565b036121c957826000036121a55760006121c2565b826121b8670de0b6b3a7640000866134bc565b6121c291906134db565b905061178f565b836000036121d857600061178c565b83611fa1670de0b6b3a7640000856134bc565b60008183106121fa578161178f565b5090919050565b60408051600080825260208201909252606091906122229060448101613516565b60408051601f19818403018152918152602080830180516001600160e01b03166352e831dd60e01b1790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe6020820152600160601b8502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be6041820152600160601b840260608201526e5af43d82803e903d91602b57fd5bf360881b607482015280826040516020016122ff929190613454565b6040516020818303038152906040529250505092915050565b60008060006123278585612556565b915091506123348161259b565b509392505050565b610ac58383836126e5565b611c118484848461275d565b604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b1580156123ba57600080fd5b505af11580156123ce573d6000803e3d6000fd5b505050505050505050565b60008083610140015160018111156123f3576123f3613311565b14801561241657506000826101400151600181111561241457612414613311565b145b156124235750600161082a565b6001836101400151600181111561243c5761243c613311565b14801561245f57506001826101400151600181111561245d5761245d613311565b145b1561246c5750600261082a565b50600092915050565b61247f83836127e0565b61249c57604051633fcd37a360e11b815260040160405180910390fd5b60008160028111156124b0576124b0613311565b036124dd578160800151836080015114610ac55760405163a0b9446560e01b815260040160405180910390fd5b610ac583608001518360800151610d8f565b6124fb8530868a611bed565b612508878786868661282a565b8561251284611de4565b1015612531576040516301be9b0160e71b815260040160405180910390fd5b61254130868561164a858b613411565b61254d30338584611d88565b50505050505050565b600080825160410361258c5760208301516040840151606085015160001a612580878285856128b2565b94509450505050612594565b506000905060025b9250929050565b60008160048111156125af576125af613311565b036125b75750565b60018160048111156125cb576125cb613311565b036126185760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610d19565b600281600481111561262c5761262c613311565b036126795760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610d19565b600381600481111561268d5761268d613311565b036109835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610d19565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611c115760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610d19565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806114f35760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610d19565b60008260c00151600014806127f7575060c0820151155b156128045750600161082a565b61178f61281084612976565b61281984612976565b856101400151856101400151612990565b600081600281111561283e5761283e613311565b146114f357600181600281111561285757612857613311565b0361287d576000828152600560205260409020600101546128789085612a2a565b6114f3565b600281600281111561289157612891613311565b036114f3576000838152600560205260409020600101546128789086612b35565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128e9575060009050600361296d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561293d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129665760006001925092505061296d565b9150600090505b94509492505050565b600061082a8260a001518360c0015184610140015161217c565b6000808360018111156129a5576129a5613311565b036129e95760008260018111156129be576129be613311565b036129df57670de0b6b3a76400006129d685876133f9565b101590506119d6565b50828410156119d6565b60008260018111156129fd576129fd613311565b03612a0c5750838310156119d6565b670de0b6b3a7640000612a1f85876133f9565b111595945050505050565b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612a6057612a606133cd565b602002602001018181525050600281600181518110612a8157612a816133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160e01b031960e084901b168152612b079190600090889087908990600401613549565b600060405180830381600087803b158015612b2157600080fd5b505af115801561254d573d6000803e3d6000fd5b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612b6b57612b6b6133cd565b602002602001018181525050600281600181518110612b8c57612b8c6133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e7212ad7f0000000000000000000000000000000000000000000000000000000000000000612add565b600060208284031215612bfe57600080fd5b81356001600160e01b03198116811461178f57600080fd5b6001600160a01b038116811461098357600080fd5b8035612c3681612c16565b919050565b60008060408385031215612c4e57600080fd5b8235612c5981612c16565b946020939093013593505050565b600060208284031215612c7957600080fd5b813561178f81612c16565b600060208284031215612c9657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b0381118282101715612cd657612cd6612c9d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612d0457612d04612c9d565b604052919050565b803560028110612c3657600080fd5b803560038110612c3657600080fd5b600082601f830112612d3b57600080fd5b81356001600160401b03811115612d5457612d54612c9d565b612d67601f8201601f1916602001612cdc565b818152846020838601011115612d7c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a08284031215612dac57600080fd5b612db4612cb3565b905081358152612dc660208301612c2b565b6020820152612dd760408301612c2b565b6040820152612de860608301612c2b565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140612e3b818401612d0c565b90820152610160612e4d838201612d1b565b90820152610180828101356001600160401b03811115612e6c57600080fd5b612e7885828601612d2a565b82840152505092915050565b600060208284031215612e9657600080fd5b81356001600160401b03811115612eac57600080fd5b6119d684828501612d99565b600080600060608486031215612ecd57600080fd5b505081359360208301359350604090920135919050565b60006001600160401b03821115612efd57612efd612c9d565b5060051b60200190565b600082601f830112612f1857600080fd5b81356020612f2d612f2883612ee4565b612cdc565b82815260059290921b84018101918181019086841115612f4c57600080fd5b8286015b84811015612f675780358352918301918301612f50565b509695505050505050565b600080600080600060a08688031215612f8a57600080fd5b8535612f9581612c16565b94506020860135612fa581612c16565b935060408601356001600160401b0380821115612fc157600080fd5b612fcd89838a01612f07565b94506060880135915080821115612fe357600080fd5b612fef89838a01612f07565b9350608088013591508082111561300557600080fd5b5061301288828901612d2a565b9150509295509295909350565b600082601f83011261303057600080fd5b81356020613040612f2883612ee4565b82815260059290921b8401810191818101908684111561305f57600080fd5b8286015b84811015612f675780356001600160401b038111156130825760008081fd5b6130908986838b0101612d99565b845250918301918301613063565b600080604083850312156130b157600080fd5b82356001600160401b03808211156130c857600080fd5b6130d48683870161301f565b935060208501359150808211156130ea57600080fd5b506130f785828601612f07565b9150509250929050565b6000806040838503121561311457600080fd5b50508035926020909101359150565b6000806040838503121561313657600080fd5b8235915060208301356001600160401b0381111561315357600080fd5b6130f785828601612d99565b6000806000806080858703121561317557600080fd5b84356001600160401b038082111561318c57600080fd5b61319888838901612d99565b955060208701359150808211156131ae57600080fd5b6131ba8883890161301f565b94506040870135935060608701359150808211156131d757600080fd5b506131e487828801612f07565b91505092959194509250565b600080600080600060a0868803121561320857600080fd5b853561321381612c16565b9450602086013561322381612c16565b9350604086013592506060860135915060808601356001600160401b0381111561324c57600080fd5b61301288828901612d2a565b60006020828403121561326a57600080fd5b81356001600160401b0381111561328057600080fd5b6119d68482850161301f565b6000806040838503121561329f57600080fd5b82356001600160401b038111156132b557600080fd5b6132c185828601612d99565b95602094909401359450505050565b6000602082840312156132e257600080fd5b815161178f81612c16565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b6003811061333757613337613311565b9052565b8d8152602081018d90526001600160a01b038c811660408301528b811660608301528a16608082015260a0810189905260c0810188905260e081018790526101008101869052610120810185905261014081018490526101a08101600284106133a6576133a6613311565b836101608301526133bb610180830184613327565b9e9d5050505050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561340c5761340c6133e3565b500190565b600082821015613423576134236133e3565b500390565b60005b8381101561344357818101518382015260200161342b565b83811115611c115750506000910152565b60008351613466818460208801613428565b83519083019061347a818360208801613428565b01949350505050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60008160001904831182151516156134d6576134d66133e3565b500290565b6000826134f857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561350f57600080fd5b5051919050565b6020815260008251806020840152613535816040850160208701613428565b601f01601f19169190910160400192915050565b6001600160a01b038616815260208082018690526040820185905260a06060830181905284519083018190526000918581019160c0850190845b8181101561359f57845183529383019391830191600101613583565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a2646970667358221220d93139e32bae530b273044d07d00326d19debeb5b49b08f172b04a7bc677797964736f6c634300080f00330000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa841740000000000000000000000004d97dcd97ec945f40cf65f87097ace5ea0476045000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x9084668eccf2c9fbf05d49323b5fd6de7a2578a01a7c817de9ac34d128d081ba\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x1107e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x022d727a4c8ecdaa9e0aee5e5ef1a6ade286ea48052db6a2d76d949f3122273d\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x110f1\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0xa035304622733ecdf80c9226c65241b683d839ffb278a25bd3ca1cdc2ab24ecb\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x7d3c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x212ec4c121617c2cf0ce56ebca9bc28da53ebcb6f8c8cb6fb2e810fd8e7a4e26\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x84d2\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [\n    {\n      \"transactionHash\": \"0xf7f61cb1ce8e09f9652e85c6ef1196f7225a40221a473d89c117108101f31b8e\",\n      \"transactionIndex\": \"0x0\",\n      \"blockHash\": \"0x174f5a07ba31e49438fa23b48c2b1181fab0003a63ff6907eed7a4108f576614\",\n      \"blockNumber\": \"0x1fed106\",\n      \"from\": \"0x09b39caAd32c6C3999aA3f9248C6dfb01f7806d4\",\n      \"to\": null,\n      \"cumulativeGasUsed\": \"0x320586\",\n      \"gasUsed\": \"0x320586\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"logs\": [\n        {\n          \"address\": \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n          \"topics\": [\n            \"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\",\n            \"0x000000000000000000000000fffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n            \"0x0000000000000000000000004d97dcd97ec945f40cf65f87097ace5ea0476045\"\n          ],\n          \"data\": \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\",\n          \"blockHash\": \"0x174f5a07ba31e49438fa23b48c2b1181fab0003a63ff6907eed7a4108f576614\",\n          \"blockNumber\": \"0x1fed106\",\n          \"transactionHash\": \"0xf7f61cb1ce8e09f9652e85c6ef1196f7225a40221a473d89c117108101f31b8e\",\n          \"transactionIndex\": \"0x0\",\n          \"logIndex\": \"0x0\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n            \"0x000000000000000000000000ef46d5fe753c988606e6f703260d816af53b03eb\"\n          ],\n          \"data\": \"0x00000000000000000000000000000000000000000000000009194fa71f0098320000000000000000000000000000000000000000000000004139c1192c5600000000000000000000000000000000000000000000000028b1c70d7fdb56bd10e1000000000000000000000000000000000000000000000000382071720d5567ce0000000000000000000000000000000000000000000028b1d026cf8275bda913\",\n          \"blockHash\": \"0x174f5a07ba31e49438fa23b48c2b1181fab0003a63ff6907eed7a4108f576614\",\n          \"blockNumber\": \"0x1fed106\",\n          \"transactionHash\": \"0xf7f61cb1ce8e09f9652e85c6ef1196f7225a40221a473d89c117108101f31b8e\",\n          \"transactionIndex\": \"0x0\",\n          \"logIndex\": \"0x1\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000040000000000000000000000004000000000008000008000000000000000000000600000000000000000000000000000000200800000000000000000000100000000000000000000000000000000008000000000000000000000000180000000000000000001000000000000000001000000000000000000000000000000000000000000220000000400000000000000000001000000000000000000000000200000004000000000000000000041000000000000000000000000000000100000000000000010008000000000000000000000000002000000000000000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0x2e90edd000\"\n    },\n    {\n      \"transactionHash\": \"0x9084668eccf2c9fbf05d49323b5fd6de7a2578a01a7c817de9ac34d128d081ba\",\n      \"transactionIndex\": \"0x1\",\n      \"blockHash\": \"0x174f5a07ba31e49438fa23b48c2b1181fab0003a63ff6907eed7a4108f576614\",\n      \"blockNumber\": \"0x1fed106\",\n      \"from\": \"0x09b39caAd32c6C3999aA3f9248C6dfb01f7806d4\",\n      \"to\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"cumulativeGasUsed\": \"0x32bfd8\",\n      \"gasUsed\": \"0xba52\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n          \"topics\": [\n            \"0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc\",\n            \"0x000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x174f5a07ba31e49438fa23b48c2b1181fab0003a63ff6907eed7a4108f576614\",\n          \"blockNumber\": \"0x1fed106\",\n          \"transactionHash\": \"0x9084668eccf2c9fbf05d49323b5fd6de7a2578a01a7c817de9ac34d128d081ba\",\n          \"transactionIndex\": \"0x1\",\n          \"logIndex\": \"0x2\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n            \"0x000000000000000000000000ef46d5fe753c988606e6f703260d816af53b03eb\"\n          ],\n          \"data\": \"0x0000000000000000000000000000000000000000000000000021e437354329d6000000000000000000000000000000000000000000000000382071720acb20000000000000000000000000000000000000000000000028b1d026cf8275bda91300000000000000000000000000000000000000000000000037fe8d3ad587f62a0000000000000000000000000000000000000000000028b1d048b3b9ab00d2e9\",\n          \"blockHash\": \"0x174f5a07ba31e49438fa23b48c2b1181fab0003a63ff6907eed7a4108f576614\",\n          \"blockNumber\": \"0x1fed106\",\n          \"transactionHash\": \"0x9084668eccf2c9fbf05d49323b5fd6de7a2578a01a7c817de9ac34d128d081ba\",\n          \"transactionIndex\": \"0x1\",\n          \"logIndex\": \"0x3\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000008000008000000000010000000000400000010000000000000000000000000000800000000000000000000100000000000000000080000000000000000000200000000000000000000080000000000000000000000000000000000000000001000000000000000000000000000000000000200000000000000000000000000000000000080000000000000000200000004000000000000028000041000000000000000000000000000000100000000000000000000000000000000000000000000102000000000000000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0x2e90edd000\"\n    },\n    {\n      \"transactionHash\": \"0x022d727a4c8ecdaa9e0aee5e5ef1a6ade286ea48052db6a2d76d949f3122273d\",\n      \"transactionIndex\": \"0x2\",\n      \"blockHash\": \"0x174f5a07ba31e49438fa23b48c2b1181fab0003a63ff6907eed7a4108f576614\",\n      \"blockNumber\": \"0x1fed106\",\n      \"from\": \"0x09b39caAd32c6C3999aA3f9248C6dfb01f7806d4\",\n      \"to\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"cumulativeGasUsed\": \"0x337a79\",\n      \"gasUsed\": \"0xbaa1\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n          \"topics\": [\n            \"0xf1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c\",\n            \"0x000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x174f5a07ba31e49438fa23b48c2b1181fab0003a63ff6907eed7a4108f576614\",\n          \"blockNumber\": \"0x1fed106\",\n          \"transactionHash\": \"0x022d727a4c8ecdaa9e0aee5e5ef1a6ade286ea48052db6a2d76d949f3122273d\",\n          \"transactionIndex\": \"0x2\",\n          \"logIndex\": \"0x4\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n            \"0x000000000000000000000000ef46d5fe753c988606e6f703260d816af53b03eb\"\n          ],\n          \"data\": \"0x0000000000000000000000000000000000000000000000000021f295eea655d300000000000000000000000000000000000000000000000037fe8d3ad57e80000000000000000000000000000000000000000000000028b1d048b3b9ab00d2e900000000000000000000000000000000000000000000000037dc9aa4e6d82a2d0000000000000000000000000000000000000000000028b1d06aa64f99a728bc\",\n          \"blockHash\": \"0x174f5a07ba31e49438fa23b48c2b1181fab0003a63ff6907eed7a4108f576614\",\n          \"blockNumber\": \"0x1fed106\",\n          \"transactionHash\": \"0x022d727a4c8ecdaa9e0aee5e5ef1a6ade286ea48052db6a2d76d949f3122273d\",\n          \"transactionIndex\": \"0x2\",\n          \"logIndex\": \"0x5\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000008000008000000000010000000000400000010000000000000000000000000000800000000000000000000100000000000000000080000000000000000000000000000000000000000080000000000000000000000000000000000000000001000000000000000000000000000000002000200000000000000000100000000000000000000000000000000000200000004000000000000028000041000000000000000000000000000000100000000000000000000000000000000000000000000002800000000000000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0x2e90edd000\"\n    },\n    {\n      \"transactionHash\": \"0xa035304622733ecdf80c9226c65241b683d839ffb278a25bd3ca1cdc2ab24ecb\",\n      \"transactionIndex\": \"0x3\",\n      \"blockHash\": \"0x174f5a07ba31e49438fa23b48c2b1181fab0003a63ff6907eed7a4108f576614\",\n      \"blockNumber\": \"0x1fed106\",\n      \"from\": \"0x09b39caAd32c6C3999aA3f9248C6dfb01f7806d4\",\n      \"to\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"cumulativeGasUsed\": \"0x33d525\",\n      \"gasUsed\": \"0x5aac\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n          \"topics\": [\n            \"0x787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x174f5a07ba31e49438fa23b48c2b1181fab0003a63ff6907eed7a4108f576614\",\n          \"blockNumber\": \"0x1fed106\",\n          \"transactionHash\": \"0xa035304622733ecdf80c9226c65241b683d839ffb278a25bd3ca1cdc2ab24ecb\",\n          \"transactionIndex\": \"0x3\",\n          \"logIndex\": \"0x6\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n            \"0x000000000000000000000000ef46d5fe753c988606e6f703260d816af53b03eb\"\n          ],\n          \"data\": \"0x00000000000000000000000000000000000000000000000000107e3cfae3254400000000000000000000000000000000000000000000000037dc9aa4e6ceb0000000000000000000000000000000000000000000000028b1d06aa64f99a728bc00000000000000000000000000000000000000000000000037cc1c67ebeb8abc0000000000000000000000000000000000000000000028b1d07b248c948a4e00\",\n          \"blockHash\": \"0x174f5a07ba31e49438fa23b48c2b1181fab0003a63ff6907eed7a4108f576614\",\n          \"blockNumber\": \"0x1fed106\",\n          \"transactionHash\": \"0xa035304622733ecdf80c9226c65241b683d839ffb278a25bd3ca1cdc2ab24ecb\",\n          \"transactionIndex\": \"0x3\",\n          \"logIndex\": \"0x7\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000002000000000000000000000000040000000000000000000000000000000000008000008000000000010000000000400000000000000000000000000000000000800000000000000000000100000000000000020080000000000000000000000000000000000000002080000000000000000000000000000000000000000001000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000200000004000000000000000000041000000000000000000000000000000100000000000000000000000000000000000000000000002000000000000000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0x2e90edd000\"\n    },\n    {\n      \"transactionHash\": \"0x212ec4c121617c2cf0ce56ebca9bc28da53ebcb6f8c8cb6fb2e810fd8e7a4e26\",\n      \"transactionIndex\": \"0x4\",\n      \"blockHash\": \"0x174f5a07ba31e49438fa23b48c2b1181fab0003a63ff6907eed7a4108f576614\",\n      \"blockNumber\": \"0x1fed106\",\n      \"from\": \"0x09b39caAd32c6C3999aA3f9248C6dfb01f7806d4\",\n      \"to\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"cumulativeGasUsed\": \"0x342ff7\",\n      \"gasUsed\": \"0x5ad2\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n          \"topics\": [\n            \"0xf7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x174f5a07ba31e49438fa23b48c2b1181fab0003a63ff6907eed7a4108f576614\",\n          \"blockNumber\": \"0x1fed106\",\n          \"transactionHash\": \"0x212ec4c121617c2cf0ce56ebca9bc28da53ebcb6f8c8cb6fb2e810fd8e7a4e26\",\n          \"transactionIndex\": \"0x4\",\n          \"logIndex\": \"0x8\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n            \"0x000000000000000000000000ef46d5fe753c988606e6f703260d816af53b03eb\"\n          ],\n          \"data\": \"0x000000000000000000000000000000000000000000000000001085267e30035600000000000000000000000000000000000000000000000037cc1c67ebe6f0000000000000000000000000000000000000000000000028b1d07b248c948a4e0000000000000000000000000000000000000000000000000037bb97416db6ecaa0000000000000000000000000000000000000000000028b1d08ba9b312ba5156\",\n          \"blockHash\": \"0x174f5a07ba31e49438fa23b48c2b1181fab0003a63ff6907eed7a4108f576614\",\n          \"blockNumber\": \"0x1fed106\",\n          \"transactionHash\": \"0x212ec4c121617c2cf0ce56ebca9bc28da53ebcb6f8c8cb6fb2e810fd8e7a4e26\",\n          \"transactionIndex\": \"0x4\",\n          \"logIndex\": \"0x9\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000008000008000000000010000000000400000000000000000000000000000000000800000000000000000000100000000000000000080000000000000100000000000000000000000000080000000000000000000000000000000000000000001000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000200000004004000000000000800041000000000000000000000000000000100000000000000000000000000000000000000000000002000000000000000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0x2e90edd000\"\n    }\n  ],\n  \"libraries\": [],\n  \"pending\": [],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/137/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\"\n    }\n  },\n  \"timestamp\": 1663958977,\n  \"commit\": \"ec7c23f\"\n}"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/137/deployExchange-1664228337.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": \"0x35423c49cb07c9ccecad9af20df52cccdeff0d46f833d438de8b02f2504aed22\",\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n        \"0x4D97DCd97eC945f40cF65F87097ACe5EA0476045\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"gas\": \"0x4d88f0\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b506040516200473f3803806200473f8339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516143386200040760003960006108970152600081816104c801528181612698015281816129450152818161355201526136820152600081816105eb015281816125e3015281816128ed0152818161358e01526136be01526000612258015260006122a701526000612282015260006121db015260006122050152600061222f01526143386000f3fe608060405234801561001057600080fd5b50600436106103365760003560e01c806370480275116101b2578063d798eff6116100f9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610892578063fa950b48146108b9578063fbddd751146108cc578063fe729aaf146108df57600080fd5b8063e60f0c0514610834578063edef7d8e14610847578063f23a6e611461085a57600080fd5b8063e03ac3d0116100d3578063e03ac3d014610806578063e2eec4051461080e578063e50e4f971461082157600080fd5b8063d798eff6146107bd578063d7fb272f146107d0578063d82da838146107f357600080fd5b8063a287bdf11161015b578063b28c51c011610135578063b28c51c01461073b578063bc197c8114610759578063c10f1a751461079d57600080fd5b8063a287bdf114610702578063a6dfcf8614610715578063ac8a584a1461072857600080fd5b806383b8a5ae1161018c57806383b8a5ae146106d45780639870d7fe146106dc578063a10f3dce146106ef57600080fd5b8063704802751461068357806375d7370a146106965780637ecebe00146106b457600080fd5b8063429b62e5116102815780635893253c1161022a578063627cdcb911610204578063627cdcb91461061c578063654f0ce41461062457806368c7450f146106375780636d70f7ae1461064a57600080fd5b80635893253c146105ad5780635c1548fb146105e95780635c975abb1461060f57600080fd5b8063456068d21161025b578063456068d21461052f57806346423aa7146105375780634a2a11f5146105a557600080fd5b8063429b62e5146104f457806344bea37e146105145780634544f0551461051c57600080fd5b80631785f53c116102e357806334600901116102bd57806334600901146104b35780633b521d78146104c65780633d6d3598146104ec57600080fd5b80631785f53c1461042257806324d7806c146104355780632dff692d1461046f57600080fd5b80631031e36e116103145780631031e36e146103ca578063131e7e1c146103d457806313e7c9d8146103f457600080fd5b806301ffc9a71461033b5780630647ee201461036357806306b9d6911461039d575b600080fd5b61034e6103493660046136e2565b6108f2565b60405190151581526020015b60405180910390f35b61034e610371366004613756565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600460205260409020541490565b6103a561098b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161035a565b6103d2610a24565b005b6007546103a59073ffffffffffffffffffffffffffffffffffffffff1681565b610414610402366004613782565b60026020526000908152604090205481565b60405190815260200161035a565b6103d2610430366004613782565b610a78565b61034e610443366004613782565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160208190526040909120541490565b61049c61047d36600461379f565b6008602052600090815260409020805460019091015460ff9091169082565b60408051921515835260208301919091520161035a565b6103d26104c136600461379f565b610b15565b7f00000000000000000000000000000000000000000000000000000000000000006103a5565b6103d2610b5f565b610414610502366004613782565b60016020526000908152604090205481565b610414600081565b6103d261052a366004613782565b610be3565b6103d2610c36565b61058861054536600461379f565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b60408051825115158152602092830151928101929092520161035a565b6103e8610414565b6105d46105bb36600461379f565b6005602052600090815260409020805460019091015482565b6040805192835260208301919091520161035a565b7f00000000000000000000000000000000000000000000000000000000000000006103a5565b60035461034e9060ff1681565b6103d2610c88565b6103d26106323660046139f8565b610c92565b6103d2610645366004613a2d565b610cad565b61034e610658366004613782565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460011490565b6103d2610691366004613782565b610d07565b60075473ffffffffffffffffffffffffffffffffffffffff166103a5565b6104146106c2366004613782565b60046020526000908152604090205481565b6103d2610da7565b6103d26106ea366004613782565b610e2c565b6104146106fd36600461379f565b610eca565b6103a5610710366004613782565b610ee8565b6103d26107233660046139f8565b610f14565b6103d2610736366004613782565b610f1d565b60065473ffffffffffffffffffffffffffffffffffffffff166103a5565b61076c610767366004613ae8565b610fba565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161035a565b6006546103a59073ffffffffffffffffffffffffffffffffffffffff1681565b6103d26107cb366004613c16565b610fe5565b6104146107de36600461379f565b60009081526005602052604090206001015490565b6103d2610801366004613c7a565b6110f5565b6103a5611136565b6103d261081c366004613c9c565b6111a6565b61041461082f3660046139f8565b6111fb565b6103d2610842366004613cd9565b611298565b6103a5610855366004613782565b6113a6565b61076c610868366004613d6b565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b6104147f000000000000000000000000000000000000000000000000000000000000000081565b6103d26108c7366004613dd4565b6113d2565b6103d26108da366004613782565b611409565b6103d26108ed366004613e09565b61145c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000148061098557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600654604080517faaf10f42000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163aaf10f429160048083019260209291908290030181865afa1580156109fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1f9190613e4e565b905090565b3360009081526001602081905260409091205414610a6e576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a7661155e565b565b3360009081526001602081905260409091205414610ac2576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610b5c576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b33600090815260026020526040902054600114610ba8576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610c2d576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5c816115b6565b3360009081526001602081905260409091205414610c80576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a76611644565b610a766001611699565b6000610c9d826111fb565b9050610ca981836116c7565b5050565b3360009081526001602081905260409091205414610cf7576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d02838383611826565b505050565b3360009081526001602081905260409091205414610d51576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610df1576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610e76576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610ed582610b15565b5060009081526005602052604090205490565b600061098582610ef6611136565b60075473ffffffffffffffffffffffffffffffffffffffff16611982565b610b5c81611a80565b3360009081526001602081905260409091205414610f67576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b7fbc197c81000000000000000000000000000000000000000000000000000000005b95945050505050565b600054600203611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6002600081815533815260209190915260409020546001146110a4576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff16156110e1576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ec828233611b85565b50506001600055565b806110ff83610eca565b14610ca9576040517f66f8620a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600754604080517fa619486e000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163a619486e9160048083019260209291908290030181865afa1580156109fb573d6000803e3d6000fd5b6111c58160400151826020015184846101800151856101600151611bde565b610ca9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109857fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e610160015160405160200161127d9d9c9b9a99989796959493929190613eae565b60405160208183030381529060405280519060200120611c3c565b600054600203611304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161104d565b600260008181553381526020919091526040902054600114611352576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff161561138f576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139b84848484611ca5565b505060016000555050565b6000610985826113b461098b565b60065473ffffffffffffffffffffffffffffffffffffffff16611e5c565b805160005b81811015610d02576114018382815181106113f4576113f4613f4c565b6020026020010151611a80565b6001016113d7565b3360009081526001602081905260409091205414611453576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5c81611ebe565b6000546002036114c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161104d565b600260008181553381526020919091526040902054600114611516576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff1615611553576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ec828233611f4c565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b60075460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b336000908152600460205260409020546116b4908290613faa565b3360009081526004602052604090205550565b60008160e001511180156116de5750428160e00151105b15611715576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61171f82826111a6565b6103e88161012001511115611760576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61176d8160800151610b15565b60008281526008602052604090205460ff16156117b6576040517f7b38b76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117f0816020015182610100015173ffffffffffffffffffffffffffffffffffffffff919091166000908152600460205260409020541490565b610ca9576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8183148061183a575082158061183a575081155b15611871576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526005602052604090205415158061189a575060008281526005602052604090205415155b156118d1576040517f3a81d6fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b60008061198e8461205a565b8051906020012090506000856040516020016119c6919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020918201207fff000000000000000000000000000000000000000000000000000000000000008285015260609790971b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021840152603583019690965260558083019490945280518083039094018452607590910190525080519201919091209392505050565b602081015173ffffffffffffffffffffffffffffffffffffffff163314611ad3576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611ade826111fb565b600081815260086020526040902080549192509060ff1615611b2c576040517f7b38b76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b81811015611bd757611bcf858281518110611ba757611ba7613f4c565b6020026020010151858381518110611bc157611bc1613f4c565b602002602001015185611f4c565b600101611b8a565b5050505050565b600080826002811115611bf357611bf3613e6b565b03611c0b57611c04868686866120eb565b9050610fdc565b6002826002811115611c1f57611c1f613e6b565b03611c3057611c0486868686612139565b611c048686868661218d565b6000610985611c496121c1565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080611cb387846122f5565b91509150600080611cc389612342565b91509150611cd78960200151308488612379565b611ce28989886123a3565b611cec84826123f5565b6101208a0151909450600090611d2e90828c61014001516001811115611d1457611d14613e6b565b14611d1f5787611d21565b865b88888e610140015161243d565b9050611d4b308b60200151848489611d469190613fc2565b612379565b611d573033848461252d565b6000611d6284612596565b90508015611d7a57611d7a308c602001518684612379565b60208b8101516040805187815292830186905282018990526060820188905260808201849052309173ffffffffffffffffffffffffffffffffffffffff9091169087907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a46020808c01516040805187815292830186905282018990526060820188905273ffffffffffffffffffffffffffffffffffffffff169086907f63bf4d16b7fa898ef4c4b2b6d90fd201e9c56313b65638af6088d149d2ce956c9060800160405180910390a35050505050505050505050565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b166020820152600090611eb49083908590603401604051602081830303815290604052805190602001206126c6565b90505b9392505050565b60065460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b81600080611f5a86846122f5565b6101208801519193509150600090611fa790825b8961014001516001811115611f8557611f85613e6b565b14611f905785611f92565b845b8960a001518a60c001518b610140015161243d565b9050600080611fb589612342565b91509150611fcf338a60200151838689611d469190613fc2565b611fdf8960200151888489612379565b6020898101516040805185815292830184905282018890526060820187905260808201859052339173ffffffffffffffffffffffffffffffffffffffff9091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a4505050505050505050565b6060604051806101a00160405280610171815260200161419261017191396040805173ffffffffffffffffffffffffffffffffffffffff8516602082015201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526120d59291602001614005565b6040516020818303038152906040529050919050565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561212e575061212e858484612763565b90505b949350505050565b6000612146858484612763565b801561212e57508373ffffffffffffffffffffffffffffffffffffffff1661216d86610ee8565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b600061219a858484612763565b801561212e57508373ffffffffffffffffffffffffffffffffffffffff1661216d866113a6565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561222757507f000000000000000000000000000000000000000000000000000000000000000046145b1561225157507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008061230584606001516127a5565b61230e846111fb565b905061231a81856116c7565b61232d838560a001518660c00151612817565b915061233a81858561283e565b509250929050565b60008080836101400151600181111561235d5761235d613e6b565b0361236d57505060800151600091565b50506080015190600090565b816000036123915761238c8484836128eb565b61239d565b61239d84848484612940565b50505050565b815160005b81811015611bd7576123ed858583815181106123c6576123c6613f4c565b60200260200101518584815181106123e0576123e0613f4c565b602002602001015161296d565b6001016123a8565b60008061240183612596565b905083811015611eb7576040517fdf4d808000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008515610fdc576000612452858585612a52565b905060008111801561246c5750670de0b6b3a76400008111155b1561252357600083600181111561248557612485613e6b565b036124d75761249661271082614034565b866124b2836124ad81670de0b6b3a7640000613fc2565b612ac1565b6124bc908a614034565b6124c69190614034565b6124d09190614071565b9150612523565b6124eb670de0b6b3a7640000612710614034565b86612502836124ad81670de0b6b3a7640000613fc2565b61250c908a614034565b6125169190614034565b6125209190614071565b91505b5095945050505050565b801561239d5761253f84848484612379565b604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff8516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b60008160000361264f576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa15801561262b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098591906140ac565b6040517efdd58e0000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e9060440161260e565b6000806126d38585612ad7565b8051602091820120604080517fff000000000000000000000000000000000000000000000000000000000000008185015260609890981b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021890152603588019590955260558088019190915284518088039091018152607590960190935250508251920191909120919050565b60008373ffffffffffffffffffffffffffffffffffffffff166127868484612c5a565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b73ffffffffffffffffffffffffffffffffffffffff8116158015906127e0575073ffffffffffffffffffffffffffffffffffffffff81163314155b15610b5c576040517f5211a07900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008260000361282957506000611eb7565b826128348386614034565b611eb49190614071565b6000838152600860205260409020600181015490811561285e5781612864565b8360a001515b9150818311156128a0576040517fe2cc6ad600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128aa8383613fc2565b9150816000036128de5780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781555b6001018190559392505050565b7f00000000000000000000000000000000000000000000000000000000000000003073ffffffffffffffffffffffffffffffffffffffff8516036129345761238c818484612c7e565b61239d81858585612c89565b61239d7f000000000000000000000000000000000000000000000000000000000000000085858585612c95565b60006129798484612d41565b9050612986848483612ddd565b8160008061299486846122f5565b61012088015191935091506000906129ac9082611f6e565b90506000806129ba89612342565b915091506129d186868b6020015185858c89612e89565b6020808b01518a820151604080518681529384018590528301899052606083018890526080830186905273ffffffffffffffffffffffffffffffffffffffff9182169291169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a450505050505050505050565b600080826001811115612a6757612a67613e6b565b03612a9f5782600003612a7b576000612a98565b82612a8e670de0b6b3a764000086614034565b612a989190614071565b9050611eb7565b83600003612aae576000611eb4565b83612834670de0b6b3a764000085614034565b6000818310612ad05781611eb7565b5090919050565b6040805160008082526020820190925260609190612af890604481016140c5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f52e831dd000000000000000000000000000000000000000000000000000000001790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe60208201526c010000000000000000000000008502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be60418201526c01000000000000000000000000840260608201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060748201528082604051602001612c41929190614005565b6040516020818303038152906040529250505092915050565b6000806000612c698585612f09565b91509150612c7681612f4e565b509392505050565b610d02838383613101565b61239d848484846131ba565b6040517ff242432a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b158015612d2257600080fd5b505af1158015612d36573d6000803e3d6000fd5b505050505050505050565b6000808361014001516001811115612d5b57612d5b613e6b565b148015612d7e575060008261014001516001811115612d7c57612d7c613e6b565b145b15612d8b57506001610985565b60018361014001516001811115612da457612da4613e6b565b148015612dc7575060018261014001516001811115612dc557612dc5613e6b565b145b15612dd457506002610985565b50600092915050565b612de78383613279565b612e1d576040517f7f9a6f4600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816002811115612e3157612e31613e6b565b03612e77578160800151836080015114610d02576040517fa0b9446500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d02836080015183608001516110f5565b612e958530868a612379565b612ea287878686866132c3565b85612eac84612596565b1015612ee4576040517fdf4d808000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ef4308685611d46858b613fc2565b612f003033858461252d565b50505050505050565b6000808251604103612f3f5760208301516040840151606085015160001a612f338782858561334b565b94509450505050612f47565b506000905060025b9250929050565b6000816004811115612f6257612f62613e6b565b03612f6a5750565b6001816004811115612f7e57612f7e613e6b565b03612fe5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161104d565b6002816004811115612ff957612ff9613e6b565b03613060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161104d565b600381600481111561307457613074613e6b565b03610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161104d565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d116001600051141617169150508061239d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015260640161104d565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080611bd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000604482015260640161104d565b60008260c0015160001480613290575060c0820151155b1561329d57506001610985565b611eb76132a98461343a565b6132b28461343a565b856101400151856101400151613454565b60008160028111156132d7576132d7613e6b565b14611bd75760018160028111156132f0576132f0613e6b565b036133165760008281526005602052604090206001015461331190856134ee565b611bd7565b600281600281111561332a5761332a613e6b565b03611bd757600083815260056020526040902060010154613311908661361e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156133825750600090506003613431565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156133d6573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661342a57600060019250925050613431565b9150600090505b94509492505050565b60006109858260a001518360c00151846101400151612a52565b60008083600181111561346957613469613e6b565b036134ad57600082600181111561348257613482613e6b565b036134a357670de0b6b3a764000061349a8587613faa565b10159050612131565b5082841015612131565b60008260018111156134c1576134c1613e6b565b036134d0575083831015612131565b670de0b6b3a76400006134e38587613faa565b111595945050505050565b60408051600280825260608201835260009260208301908036833701905050905060018160008151811061352457613524613f4c565b60200260200101818152505060028160018151811061354557613545613f4c565b60209081029190910101527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526135f09190600090889087908990600401614116565b600060405180830381600087803b15801561360a57600080fd5b505af1158015612f00573d6000803e3d6000fd5b60408051600280825260608201835260009260208301908036833701905050905060018160008151811061365457613654613f4c565b60200260200101818152505060028160018151811061367557613675613f4c565b60209081029190910101527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639e7212ad7f00000000000000000000000000000000000000000000000000000000000000006135ae565b6000602082840312156136f457600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611eb757600080fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610b5c57600080fd5b803561375181613724565b919050565b6000806040838503121561376957600080fd5b823561377481613724565b946020939093013593505050565b60006020828403121561379457600080fd5b8135611eb781613724565b6000602082840312156137b157600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101a0810167ffffffffffffffff8111828210171561380b5761380b6137b8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613858576138586137b8565b604052919050565b80356002811061375157600080fd5b80356003811061375157600080fd5b600082601f83011261388f57600080fd5b813567ffffffffffffffff8111156138a9576138a96137b8565b6138da60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613811565b8181528460208386010111156138ef57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a0828403121561391f57600080fd5b6139276137e7565b90508135815261393960208301613746565b602082015261394a60408301613746565b604082015261395b60608301613746565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101406139ae818401613860565b908201526101606139c083820161386f565b908201526101808281013567ffffffffffffffff8111156139e057600080fd5b6139ec8582860161387e565b82840152505092915050565b600060208284031215613a0a57600080fd5b813567ffffffffffffffff811115613a2157600080fd5b6121318482850161390c565b600080600060608486031215613a4257600080fd5b505081359360208301359350604090920135919050565b600067ffffffffffffffff821115613a7357613a736137b8565b5060051b60200190565b600082601f830112613a8e57600080fd5b81356020613aa3613a9e83613a59565b613811565b82815260059290921b84018101918181019086841115613ac257600080fd5b8286015b84811015613add5780358352918301918301613ac6565b509695505050505050565b600080600080600060a08688031215613b0057600080fd5b8535613b0b81613724565b94506020860135613b1b81613724565b9350604086013567ffffffffffffffff80821115613b3857600080fd5b613b4489838a01613a7d565b94506060880135915080821115613b5a57600080fd5b613b6689838a01613a7d565b93506080880135915080821115613b7c57600080fd5b50613b898882890161387e565b9150509295509295909350565b600082601f830112613ba757600080fd5b81356020613bb7613a9e83613a59565b82815260059290921b84018101918181019086841115613bd657600080fd5b8286015b84811015613add57803567ffffffffffffffff811115613bfa5760008081fd5b613c088986838b010161390c565b845250918301918301613bda565b60008060408385031215613c2957600080fd5b823567ffffffffffffffff80821115613c4157600080fd5b613c4d86838701613b96565b93506020850135915080821115613c6357600080fd5b50613c7085828601613a7d565b9150509250929050565b60008060408385031215613c8d57600080fd5b50508035926020909101359150565b60008060408385031215613caf57600080fd5b82359150602083013567ffffffffffffffff811115613ccd57600080fd5b613c708582860161390c565b60008060008060808587031215613cef57600080fd5b843567ffffffffffffffff80821115613d0757600080fd5b613d138883890161390c565b95506020870135915080821115613d2957600080fd5b613d3588838901613b96565b9450604087013593506060870135915080821115613d5257600080fd5b50613d5f87828801613a7d565b91505092959194509250565b600080600080600060a08688031215613d8357600080fd5b8535613d8e81613724565b94506020860135613d9e81613724565b93506040860135925060608601359150608086013567ffffffffffffffff811115613dc857600080fd5b613b898882890161387e565b600060208284031215613de657600080fd5b813567ffffffffffffffff811115613dfd57600080fd5b61213184828501613b96565b60008060408385031215613e1c57600080fd5b823567ffffffffffffffff811115613e3357600080fd5b613e3f8582860161390c565b95602094909401359450505050565b600060208284031215613e6057600080fd5b8151611eb781613724565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110613eaa57613eaa613e6b565b9052565b60006101a0820190508e82528d602083015273ffffffffffffffffffffffffffffffffffffffff808e166040840152808d166060840152808c166080840152508960a08301528860c08301528760e083015286610100830152856101208301528461014083015260028410613f2557613f25613e6b565b83610160830152613f3a610180830184613e9a565b9e9d5050505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115613fbd57613fbd613f7b565b500190565b600082821015613fd457613fd4613f7b565b500390565b60005b83811015613ff4578181015183820152602001613fdc565b8381111561239d5750506000910152565b60008351614017818460208801613fd9565b83519083019061402b818360208801613fd9565b01949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561406c5761406c613f7b565b500290565b6000826140a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000602082840312156140be57600080fd5b5051919050565b60208152600082518060208401526140e4816040850160208701613fd9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060a0820173ffffffffffffffffffffffffffffffffffffffff881683526020878185015286604085015260a0606085015281865180845260c086019150828801935060005b818110156141795784518352938301939183019160010161415d565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a264697066735822122056df26e165b5957191bd0ff149c07ae13f5a6b4252973fb3c07a4653cce0f3b164736f6c634300080f00330000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa841740000000000000000000000004d97dcd97ec945f40cf65f87097ace5ea0476045000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x8dedda12c2ee8a8893c436e726bb0112d542455e3db12bddb9a5cd097d8a6d16\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x1107c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x2f62b1db98a1173317d27d8ea06fc8c657b456b4c7c16b0c4955a06d70d9ee3a\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x10169\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0xde6e10751f2a3679109c25a571f210858da0812d6635e2702f61da15d5c5a71a\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x7d00\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x0e0391adbe52ad44a30ee682c4cf270896190b02931b5c421ddc0aafbec0590a\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x7d34\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [],\n  \"libraries\": [],\n  \"pending\": [\n    \"0x35423c49cb07c9ccecad9af20df52cccdeff0d46f833d438de8b02f2504aed22\",\n    \"0x8dedda12c2ee8a8893c436e726bb0112d542455e3db12bddb9a5cd097d8a6d16\",\n    \"0x2f62b1db98a1173317d27d8ea06fc8c657b456b4c7c16b0c4955a06d70d9ee3a\",\n    \"0xde6e10751f2a3679109c25a571f210858da0812d6635e2702f61da15d5c5a71a\",\n    \"0x0e0391adbe52ad44a30ee682c4cf270896190b02931b5c421ddc0aafbec0590a\"\n  ],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/137/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\"\n    }\n  },\n  \"timestamp\": 1664228337,\n  \"commit\": \"af3ba7f\"\n}"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/137/deployExchange-1664228343.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": \"0x35423c49cb07c9ccecad9af20df52cccdeff0d46f833d438de8b02f2504aed22\",\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n        \"0x4D97DCd97eC945f40cF65F87097ACe5EA0476045\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"gas\": \"0x4d88f0\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b506040516200473f3803806200473f8339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516143386200040760003960006108970152600081816104c801528181612698015281816129450152818161355201526136820152600081816105eb015281816125e3015281816128ed0152818161358e01526136be01526000612258015260006122a701526000612282015260006121db015260006122050152600061222f01526143386000f3fe608060405234801561001057600080fd5b50600436106103365760003560e01c806370480275116101b2578063d798eff6116100f9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610892578063fa950b48146108b9578063fbddd751146108cc578063fe729aaf146108df57600080fd5b8063e60f0c0514610834578063edef7d8e14610847578063f23a6e611461085a57600080fd5b8063e03ac3d0116100d3578063e03ac3d014610806578063e2eec4051461080e578063e50e4f971461082157600080fd5b8063d798eff6146107bd578063d7fb272f146107d0578063d82da838146107f357600080fd5b8063a287bdf11161015b578063b28c51c011610135578063b28c51c01461073b578063bc197c8114610759578063c10f1a751461079d57600080fd5b8063a287bdf114610702578063a6dfcf8614610715578063ac8a584a1461072857600080fd5b806383b8a5ae1161018c57806383b8a5ae146106d45780639870d7fe146106dc578063a10f3dce146106ef57600080fd5b8063704802751461068357806375d7370a146106965780637ecebe00146106b457600080fd5b8063429b62e5116102815780635893253c1161022a578063627cdcb911610204578063627cdcb91461061c578063654f0ce41461062457806368c7450f146106375780636d70f7ae1461064a57600080fd5b80635893253c146105ad5780635c1548fb146105e95780635c975abb1461060f57600080fd5b8063456068d21161025b578063456068d21461052f57806346423aa7146105375780634a2a11f5146105a557600080fd5b8063429b62e5146104f457806344bea37e146105145780634544f0551461051c57600080fd5b80631785f53c116102e357806334600901116102bd57806334600901146104b35780633b521d78146104c65780633d6d3598146104ec57600080fd5b80631785f53c1461042257806324d7806c146104355780632dff692d1461046f57600080fd5b80631031e36e116103145780631031e36e146103ca578063131e7e1c146103d457806313e7c9d8146103f457600080fd5b806301ffc9a71461033b5780630647ee201461036357806306b9d6911461039d575b600080fd5b61034e6103493660046136e2565b6108f2565b60405190151581526020015b60405180910390f35b61034e610371366004613756565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600460205260409020541490565b6103a561098b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161035a565b6103d2610a24565b005b6007546103a59073ffffffffffffffffffffffffffffffffffffffff1681565b610414610402366004613782565b60026020526000908152604090205481565b60405190815260200161035a565b6103d2610430366004613782565b610a78565b61034e610443366004613782565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160208190526040909120541490565b61049c61047d36600461379f565b6008602052600090815260409020805460019091015460ff9091169082565b60408051921515835260208301919091520161035a565b6103d26104c136600461379f565b610b15565b7f00000000000000000000000000000000000000000000000000000000000000006103a5565b6103d2610b5f565b610414610502366004613782565b60016020526000908152604090205481565b610414600081565b6103d261052a366004613782565b610be3565b6103d2610c36565b61058861054536600461379f565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b60408051825115158152602092830151928101929092520161035a565b6103e8610414565b6105d46105bb36600461379f565b6005602052600090815260409020805460019091015482565b6040805192835260208301919091520161035a565b7f00000000000000000000000000000000000000000000000000000000000000006103a5565b60035461034e9060ff1681565b6103d2610c88565b6103d26106323660046139f8565b610c92565b6103d2610645366004613a2d565b610cad565b61034e610658366004613782565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460011490565b6103d2610691366004613782565b610d07565b60075473ffffffffffffffffffffffffffffffffffffffff166103a5565b6104146106c2366004613782565b60046020526000908152604090205481565b6103d2610da7565b6103d26106ea366004613782565b610e2c565b6104146106fd36600461379f565b610eca565b6103a5610710366004613782565b610ee8565b6103d26107233660046139f8565b610f14565b6103d2610736366004613782565b610f1d565b60065473ffffffffffffffffffffffffffffffffffffffff166103a5565b61076c610767366004613ae8565b610fba565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161035a565b6006546103a59073ffffffffffffffffffffffffffffffffffffffff1681565b6103d26107cb366004613c16565b610fe5565b6104146107de36600461379f565b60009081526005602052604090206001015490565b6103d2610801366004613c7a565b6110f5565b6103a5611136565b6103d261081c366004613c9c565b6111a6565b61041461082f3660046139f8565b6111fb565b6103d2610842366004613cd9565b611298565b6103a5610855366004613782565b6113a6565b61076c610868366004613d6b565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b6104147f000000000000000000000000000000000000000000000000000000000000000081565b6103d26108c7366004613dd4565b6113d2565b6103d26108da366004613782565b611409565b6103d26108ed366004613e09565b61145c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000148061098557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600654604080517faaf10f42000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163aaf10f429160048083019260209291908290030181865afa1580156109fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1f9190613e4e565b905090565b3360009081526001602081905260409091205414610a6e576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a7661155e565b565b3360009081526001602081905260409091205414610ac2576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610b5c576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b33600090815260026020526040902054600114610ba8576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610c2d576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5c816115b6565b3360009081526001602081905260409091205414610c80576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a76611644565b610a766001611699565b6000610c9d826111fb565b9050610ca981836116c7565b5050565b3360009081526001602081905260409091205414610cf7576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d02838383611826565b505050565b3360009081526001602081905260409091205414610d51576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610df1576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610e76576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610ed582610b15565b5060009081526005602052604090205490565b600061098582610ef6611136565b60075473ffffffffffffffffffffffffffffffffffffffff16611982565b610b5c81611a80565b3360009081526001602081905260409091205414610f67576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b7fbc197c81000000000000000000000000000000000000000000000000000000005b95945050505050565b600054600203611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6002600081815533815260209190915260409020546001146110a4576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff16156110e1576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ec828233611b85565b50506001600055565b806110ff83610eca565b14610ca9576040517f66f8620a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600754604080517fa619486e000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163a619486e9160048083019260209291908290030181865afa1580156109fb573d6000803e3d6000fd5b6111c58160400151826020015184846101800151856101600151611bde565b610ca9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109857fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e610160015160405160200161127d9d9c9b9a99989796959493929190613eae565b60405160208183030381529060405280519060200120611c3c565b600054600203611304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161104d565b600260008181553381526020919091526040902054600114611352576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff161561138f576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139b84848484611ca5565b505060016000555050565b6000610985826113b461098b565b60065473ffffffffffffffffffffffffffffffffffffffff16611e5c565b805160005b81811015610d02576114018382815181106113f4576113f4613f4c565b6020026020010151611a80565b6001016113d7565b3360009081526001602081905260409091205414611453576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5c81611ebe565b6000546002036114c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161104d565b600260008181553381526020919091526040902054600114611516576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff1615611553576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ec828233611f4c565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b60075460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b336000908152600460205260409020546116b4908290613faa565b3360009081526004602052604090205550565b60008160e001511180156116de5750428160e00151105b15611715576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61171f82826111a6565b6103e88161012001511115611760576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61176d8160800151610b15565b60008281526008602052604090205460ff16156117b6576040517f7b38b76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117f0816020015182610100015173ffffffffffffffffffffffffffffffffffffffff919091166000908152600460205260409020541490565b610ca9576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8183148061183a575082158061183a575081155b15611871576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526005602052604090205415158061189a575060008281526005602052604090205415155b156118d1576040517f3a81d6fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b60008061198e8461205a565b8051906020012090506000856040516020016119c6919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020918201207fff000000000000000000000000000000000000000000000000000000000000008285015260609790971b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021840152603583019690965260558083019490945280518083039094018452607590910190525080519201919091209392505050565b602081015173ffffffffffffffffffffffffffffffffffffffff163314611ad3576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611ade826111fb565b600081815260086020526040902080549192509060ff1615611b2c576040517f7b38b76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b81811015611bd757611bcf858281518110611ba757611ba7613f4c565b6020026020010151858381518110611bc157611bc1613f4c565b602002602001015185611f4c565b600101611b8a565b5050505050565b600080826002811115611bf357611bf3613e6b565b03611c0b57611c04868686866120eb565b9050610fdc565b6002826002811115611c1f57611c1f613e6b565b03611c3057611c0486868686612139565b611c048686868661218d565b6000610985611c496121c1565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080611cb387846122f5565b91509150600080611cc389612342565b91509150611cd78960200151308488612379565b611ce28989886123a3565b611cec84826123f5565b6101208a0151909450600090611d2e90828c61014001516001811115611d1457611d14613e6b565b14611d1f5787611d21565b865b88888e610140015161243d565b9050611d4b308b60200151848489611d469190613fc2565b612379565b611d573033848461252d565b6000611d6284612596565b90508015611d7a57611d7a308c602001518684612379565b60208b8101516040805187815292830186905282018990526060820188905260808201849052309173ffffffffffffffffffffffffffffffffffffffff9091169087907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a46020808c01516040805187815292830186905282018990526060820188905273ffffffffffffffffffffffffffffffffffffffff169086907f63bf4d16b7fa898ef4c4b2b6d90fd201e9c56313b65638af6088d149d2ce956c9060800160405180910390a35050505050505050505050565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b166020820152600090611eb49083908590603401604051602081830303815290604052805190602001206126c6565b90505b9392505050565b60065460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b81600080611f5a86846122f5565b6101208801519193509150600090611fa790825b8961014001516001811115611f8557611f85613e6b565b14611f905785611f92565b845b8960a001518a60c001518b610140015161243d565b9050600080611fb589612342565b91509150611fcf338a60200151838689611d469190613fc2565b611fdf8960200151888489612379565b6020898101516040805185815292830184905282018890526060820187905260808201859052339173ffffffffffffffffffffffffffffffffffffffff9091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a4505050505050505050565b6060604051806101a00160405280610171815260200161419261017191396040805173ffffffffffffffffffffffffffffffffffffffff8516602082015201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526120d59291602001614005565b6040516020818303038152906040529050919050565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561212e575061212e858484612763565b90505b949350505050565b6000612146858484612763565b801561212e57508373ffffffffffffffffffffffffffffffffffffffff1661216d86610ee8565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b600061219a858484612763565b801561212e57508373ffffffffffffffffffffffffffffffffffffffff1661216d866113a6565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561222757507f000000000000000000000000000000000000000000000000000000000000000046145b1561225157507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008061230584606001516127a5565b61230e846111fb565b905061231a81856116c7565b61232d838560a001518660c00151612817565b915061233a81858561283e565b509250929050565b60008080836101400151600181111561235d5761235d613e6b565b0361236d57505060800151600091565b50506080015190600090565b816000036123915761238c8484836128eb565b61239d565b61239d84848484612940565b50505050565b815160005b81811015611bd7576123ed858583815181106123c6576123c6613f4c565b60200260200101518584815181106123e0576123e0613f4c565b602002602001015161296d565b6001016123a8565b60008061240183612596565b905083811015611eb7576040517fdf4d808000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008515610fdc576000612452858585612a52565b905060008111801561246c5750670de0b6b3a76400008111155b1561252357600083600181111561248557612485613e6b565b036124d75761249661271082614034565b866124b2836124ad81670de0b6b3a7640000613fc2565b612ac1565b6124bc908a614034565b6124c69190614034565b6124d09190614071565b9150612523565b6124eb670de0b6b3a7640000612710614034565b86612502836124ad81670de0b6b3a7640000613fc2565b61250c908a614034565b6125169190614034565b6125209190614071565b91505b5095945050505050565b801561239d5761253f84848484612379565b604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff8516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b60008160000361264f576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa15801561262b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098591906140ac565b6040517efdd58e0000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e9060440161260e565b6000806126d38585612ad7565b8051602091820120604080517fff000000000000000000000000000000000000000000000000000000000000008185015260609890981b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021890152603588019590955260558088019190915284518088039091018152607590960190935250508251920191909120919050565b60008373ffffffffffffffffffffffffffffffffffffffff166127868484612c5a565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b73ffffffffffffffffffffffffffffffffffffffff8116158015906127e0575073ffffffffffffffffffffffffffffffffffffffff81163314155b15610b5c576040517f5211a07900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008260000361282957506000611eb7565b826128348386614034565b611eb49190614071565b6000838152600860205260409020600181015490811561285e5781612864565b8360a001515b9150818311156128a0576040517fe2cc6ad600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128aa8383613fc2565b9150816000036128de5780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781555b6001018190559392505050565b7f00000000000000000000000000000000000000000000000000000000000000003073ffffffffffffffffffffffffffffffffffffffff8516036129345761238c818484612c7e565b61239d81858585612c89565b61239d7f000000000000000000000000000000000000000000000000000000000000000085858585612c95565b60006129798484612d41565b9050612986848483612ddd565b8160008061299486846122f5565b61012088015191935091506000906129ac9082611f6e565b90506000806129ba89612342565b915091506129d186868b6020015185858c89612e89565b6020808b01518a820151604080518681529384018590528301899052606083018890526080830186905273ffffffffffffffffffffffffffffffffffffffff9182169291169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a450505050505050505050565b600080826001811115612a6757612a67613e6b565b03612a9f5782600003612a7b576000612a98565b82612a8e670de0b6b3a764000086614034565b612a989190614071565b9050611eb7565b83600003612aae576000611eb4565b83612834670de0b6b3a764000085614034565b6000818310612ad05781611eb7565b5090919050565b6040805160008082526020820190925260609190612af890604481016140c5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f52e831dd000000000000000000000000000000000000000000000000000000001790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe60208201526c010000000000000000000000008502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be60418201526c01000000000000000000000000840260608201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060748201528082604051602001612c41929190614005565b6040516020818303038152906040529250505092915050565b6000806000612c698585612f09565b91509150612c7681612f4e565b509392505050565b610d02838383613101565b61239d848484846131ba565b6040517ff242432a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b158015612d2257600080fd5b505af1158015612d36573d6000803e3d6000fd5b505050505050505050565b6000808361014001516001811115612d5b57612d5b613e6b565b148015612d7e575060008261014001516001811115612d7c57612d7c613e6b565b145b15612d8b57506001610985565b60018361014001516001811115612da457612da4613e6b565b148015612dc7575060018261014001516001811115612dc557612dc5613e6b565b145b15612dd457506002610985565b50600092915050565b612de78383613279565b612e1d576040517f7f9a6f4600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816002811115612e3157612e31613e6b565b03612e77578160800151836080015114610d02576040517fa0b9446500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d02836080015183608001516110f5565b612e958530868a612379565b612ea287878686866132c3565b85612eac84612596565b1015612ee4576040517fdf4d808000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ef4308685611d46858b613fc2565b612f003033858461252d565b50505050505050565b6000808251604103612f3f5760208301516040840151606085015160001a612f338782858561334b565b94509450505050612f47565b506000905060025b9250929050565b6000816004811115612f6257612f62613e6b565b03612f6a5750565b6001816004811115612f7e57612f7e613e6b565b03612fe5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161104d565b6002816004811115612ff957612ff9613e6b565b03613060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161104d565b600381600481111561307457613074613e6b565b03610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161104d565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d116001600051141617169150508061239d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015260640161104d565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080611bd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000604482015260640161104d565b60008260c0015160001480613290575060c0820151155b1561329d57506001610985565b611eb76132a98461343a565b6132b28461343a565b856101400151856101400151613454565b60008160028111156132d7576132d7613e6b565b14611bd75760018160028111156132f0576132f0613e6b565b036133165760008281526005602052604090206001015461331190856134ee565b611bd7565b600281600281111561332a5761332a613e6b565b03611bd757600083815260056020526040902060010154613311908661361e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156133825750600090506003613431565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156133d6573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661342a57600060019250925050613431565b9150600090505b94509492505050565b60006109858260a001518360c00151846101400151612a52565b60008083600181111561346957613469613e6b565b036134ad57600082600181111561348257613482613e6b565b036134a357670de0b6b3a764000061349a8587613faa565b10159050612131565b5082841015612131565b60008260018111156134c1576134c1613e6b565b036134d0575083831015612131565b670de0b6b3a76400006134e38587613faa565b111595945050505050565b60408051600280825260608201835260009260208301908036833701905050905060018160008151811061352457613524613f4c565b60200260200101818152505060028160018151811061354557613545613f4c565b60209081029190910101527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526135f09190600090889087908990600401614116565b600060405180830381600087803b15801561360a57600080fd5b505af1158015612f00573d6000803e3d6000fd5b60408051600280825260608201835260009260208301908036833701905050905060018160008151811061365457613654613f4c565b60200260200101818152505060028160018151811061367557613675613f4c565b60209081029190910101527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639e7212ad7f00000000000000000000000000000000000000000000000000000000000000006135ae565b6000602082840312156136f457600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611eb757600080fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610b5c57600080fd5b803561375181613724565b919050565b6000806040838503121561376957600080fd5b823561377481613724565b946020939093013593505050565b60006020828403121561379457600080fd5b8135611eb781613724565b6000602082840312156137b157600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101a0810167ffffffffffffffff8111828210171561380b5761380b6137b8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613858576138586137b8565b604052919050565b80356002811061375157600080fd5b80356003811061375157600080fd5b600082601f83011261388f57600080fd5b813567ffffffffffffffff8111156138a9576138a96137b8565b6138da60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613811565b8181528460208386010111156138ef57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a0828403121561391f57600080fd5b6139276137e7565b90508135815261393960208301613746565b602082015261394a60408301613746565b604082015261395b60608301613746565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101406139ae818401613860565b908201526101606139c083820161386f565b908201526101808281013567ffffffffffffffff8111156139e057600080fd5b6139ec8582860161387e565b82840152505092915050565b600060208284031215613a0a57600080fd5b813567ffffffffffffffff811115613a2157600080fd5b6121318482850161390c565b600080600060608486031215613a4257600080fd5b505081359360208301359350604090920135919050565b600067ffffffffffffffff821115613a7357613a736137b8565b5060051b60200190565b600082601f830112613a8e57600080fd5b81356020613aa3613a9e83613a59565b613811565b82815260059290921b84018101918181019086841115613ac257600080fd5b8286015b84811015613add5780358352918301918301613ac6565b509695505050505050565b600080600080600060a08688031215613b0057600080fd5b8535613b0b81613724565b94506020860135613b1b81613724565b9350604086013567ffffffffffffffff80821115613b3857600080fd5b613b4489838a01613a7d565b94506060880135915080821115613b5a57600080fd5b613b6689838a01613a7d565b93506080880135915080821115613b7c57600080fd5b50613b898882890161387e565b9150509295509295909350565b600082601f830112613ba757600080fd5b81356020613bb7613a9e83613a59565b82815260059290921b84018101918181019086841115613bd657600080fd5b8286015b84811015613add57803567ffffffffffffffff811115613bfa5760008081fd5b613c088986838b010161390c565b845250918301918301613bda565b60008060408385031215613c2957600080fd5b823567ffffffffffffffff80821115613c4157600080fd5b613c4d86838701613b96565b93506020850135915080821115613c6357600080fd5b50613c7085828601613a7d565b9150509250929050565b60008060408385031215613c8d57600080fd5b50508035926020909101359150565b60008060408385031215613caf57600080fd5b82359150602083013567ffffffffffffffff811115613ccd57600080fd5b613c708582860161390c565b60008060008060808587031215613cef57600080fd5b843567ffffffffffffffff80821115613d0757600080fd5b613d138883890161390c565b95506020870135915080821115613d2957600080fd5b613d3588838901613b96565b9450604087013593506060870135915080821115613d5257600080fd5b50613d5f87828801613a7d565b91505092959194509250565b600080600080600060a08688031215613d8357600080fd5b8535613d8e81613724565b94506020860135613d9e81613724565b93506040860135925060608601359150608086013567ffffffffffffffff811115613dc857600080fd5b613b898882890161387e565b600060208284031215613de657600080fd5b813567ffffffffffffffff811115613dfd57600080fd5b61213184828501613b96565b60008060408385031215613e1c57600080fd5b823567ffffffffffffffff811115613e3357600080fd5b613e3f8582860161390c565b95602094909401359450505050565b600060208284031215613e6057600080fd5b8151611eb781613724565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110613eaa57613eaa613e6b565b9052565b60006101a0820190508e82528d602083015273ffffffffffffffffffffffffffffffffffffffff808e166040840152808d166060840152808c166080840152508960a08301528860c08301528760e083015286610100830152856101208301528461014083015260028410613f2557613f25613e6b565b83610160830152613f3a610180830184613e9a565b9e9d5050505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115613fbd57613fbd613f7b565b500190565b600082821015613fd457613fd4613f7b565b500390565b60005b83811015613ff4578181015183820152602001613fdc565b8381111561239d5750506000910152565b60008351614017818460208801613fd9565b83519083019061402b818360208801613fd9565b01949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561406c5761406c613f7b565b500290565b6000826140a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000602082840312156140be57600080fd5b5051919050565b60208152600082518060208401526140e4816040850160208701613fd9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060a0820173ffffffffffffffffffffffffffffffffffffffff881683526020878185015286604085015260a0606085015281865180845260c086019150828801935060005b818110156141795784518352938301939183019160010161415d565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a264697066735822122056df26e165b5957191bd0ff149c07ae13f5a6b4252973fb3c07a4653cce0f3b164736f6c634300080f00330000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa841740000000000000000000000004d97dcd97ec945f40cf65f87097ace5ea0476045000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x8dedda12c2ee8a8893c436e726bb0112d542455e3db12bddb9a5cd097d8a6d16\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x1107c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x2f62b1db98a1173317d27d8ea06fc8c657b456b4c7c16b0c4955a06d70d9ee3a\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x10169\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0xde6e10751f2a3679109c25a571f210858da0812d6635e2702f61da15d5c5a71a\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x7d00\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x0e0391adbe52ad44a30ee682c4cf270896190b02931b5c421ddc0aafbec0590a\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x7d34\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [\n    {\n      \"transactionHash\": \"0x35423c49cb07c9ccecad9af20df52cccdeff0d46f833d438de8b02f2504aed22\",\n      \"transactionIndex\": \"0x0\",\n      \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n      \"blockNumber\": \"0x200c71b\",\n      \"from\": \"0x81fd0E5E7372ED171f421A7C33a4b263Ea9DCc25\",\n      \"to\": null,\n      \"cumulativeGasUsed\": \"0x3ba46a\",\n      \"gasUsed\": \"0x3ba46a\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"logs\": [\n        {\n          \"address\": \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n          \"topics\": [\n            \"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\",\n            \"0x0000000000000000000000004bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n            \"0x0000000000000000000000004d97dcd97ec945f40cf65f87097ace5ea0476045\"\n          ],\n          \"data\": \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\",\n          \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n          \"blockNumber\": \"0x200c71b\",\n          \"transactionHash\": \"0x35423c49cb07c9ccecad9af20df52cccdeff0d46f833d438de8b02f2504aed22\",\n          \"transactionIndex\": \"0x0\",\n          \"logIndex\": \"0x0\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n            \"0x000000000000000000000000f0245f6251bef9447a08766b9da2b07b28ad80b0\"\n          ],\n          \"data\": \"0x0000000000000000000000000000000000000000000000000ad94eef487522340000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000004a14098d113bc5dcc6d0000000000000000000000000000000000000000000000002ca98bdf551addcc0000000000000000000000000000000000000000000004a14b72200304d2eea1\",\n          \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n          \"blockNumber\": \"0x200c71b\",\n          \"transactionHash\": \"0x35423c49cb07c9ccecad9af20df52cccdeff0d46f833d438de8b02f2504aed22\",\n          \"transactionIndex\": \"0x0\",\n          \"logIndex\": \"0x1\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000000000000000000000400000000000000000000000000008000000000000000000000008000000000000000000080200000000080000000000000000000000200800000000000000000400100000000000000000000000000000000000000000000000000000000000180000000000000000001000000000000000000000000000000000000000000000000000000080000220000000400000008000000000001000000000000000000000000000000004000100000000000000001000000000000000000000000000000100000000000000010008000000000000000000000000000000000000001000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0x2e90edd000\"\n    },\n    {\n      \"transactionHash\": \"0x8dedda12c2ee8a8893c436e726bb0112d542455e3db12bddb9a5cd097d8a6d16\",\n      \"transactionIndex\": \"0x1\",\n      \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n      \"blockNumber\": \"0x200c71b\",\n      \"from\": \"0x81fd0E5E7372ED171f421A7C33a4b263Ea9DCc25\",\n      \"to\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"cumulativeGasUsed\": \"0x3c5ebb\",\n      \"gasUsed\": \"0xba51\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n          \"topics\": [\n            \"0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc\",\n            \"0x000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n          \"blockNumber\": \"0x200c71b\",\n          \"transactionHash\": \"0x8dedda12c2ee8a8893c436e726bb0112d542455e3db12bddb9a5cd097d8a6d16\",\n          \"transactionIndex\": \"0x1\",\n          \"logIndex\": \"0x2\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n            \"0x000000000000000000000000f0245f6251bef9447a08766b9da2b07b28ad80b0\"\n          ],\n          \"data\": \"0x0000000000000000000000000000000000000000000000000021e408a4549f920000000000000000000000000000000000000000000000002ca98bdf51d7e0000000000000000000000000000000000000000000000004a14b72200304d2eea10000000000000000000000000000000000000000000000002c87a7d6ad83406e0000000000000000000000000000000000000000000004a14b94040ba9278e33\",\n          \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n          \"blockNumber\": \"0x200c71b\",\n          \"transactionHash\": \"0x8dedda12c2ee8a8893c436e726bb0112d542455e3db12bddb9a5cd097d8a6d16\",\n          \"transactionIndex\": \"0x1\",\n          \"logIndex\": \"0x3\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000200000000000000000400000000000000000000000000008000000000000000000000008000000000002000000000000000010080004000000000000000000000800000000000000000000100000000000000000000000000000000000000200000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000080000200000000000000000000000000000000000080000000000000000000000004000100000000028000001000000000000000000000000000000100000000000000000000000000000000000000000000100000000000001000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0x2e90edd000\"\n    },\n    {\n      \"transactionHash\": \"0x2f62b1db98a1173317d27d8ea06fc8c657b456b4c7c16b0c4955a06d70d9ee3a\",\n      \"transactionIndex\": \"0x2\",\n      \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n      \"blockNumber\": \"0x200c71b\",\n      \"from\": \"0x81fd0E5E7372ED171f421A7C33a4b263Ea9DCc25\",\n      \"to\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"cumulativeGasUsed\": \"0x3d1918\",\n      \"gasUsed\": \"0xba5d\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n          \"topics\": [\n            \"0xf1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c\",\n            \"0x000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n          \"blockNumber\": \"0x200c71b\",\n          \"transactionHash\": \"0x2f62b1db98a1173317d27d8ea06fc8c657b456b4c7c16b0c4955a06d70d9ee3a\",\n          \"transactionIndex\": \"0x2\",\n          \"logIndex\": \"0x4\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n            \"0x000000000000000000000000f0245f6251bef9447a08766b9da2b07b28ad80b0\"\n          ],\n          \"data\": \"0x0000000000000000000000000000000000000000000000000021e6376f7a5eea0000000000000000000000000000000000000000000000002c87a7d6ad7910000000000000000000000000000000000000000000000004a14b94040ba9278e330000000000000000000000000000000000000000000000002c65c19f3dfeb1160000000000000000000000000000000000000000000004a14bb5ea4318a1ed1d\",\n          \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n          \"blockNumber\": \"0x200c71b\",\n          \"transactionHash\": \"0x2f62b1db98a1173317d27d8ea06fc8c657b456b4c7c16b0c4955a06d70d9ee3a\",\n          \"transactionIndex\": \"0x2\",\n          \"logIndex\": \"0x5\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000200000000000000000400000000000000000000000000008000000000000000000000008000000000002000000000000000010080004000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000082000200000000000000000100000000000000000000000000000000000000000004000100000000028000001000000000000000000000000000000100000000000000000000000000000000000000000000000800000000001000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0x2e90edd000\"\n    },\n    {\n      \"transactionHash\": \"0xde6e10751f2a3679109c25a571f210858da0812d6635e2702f61da15d5c5a71a\",\n      \"transactionIndex\": \"0x3\",\n      \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n      \"blockNumber\": \"0x200c71b\",\n      \"from\": \"0x81fd0E5E7372ED171f421A7C33a4b263Ea9DCc25\",\n      \"to\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"cumulativeGasUsed\": \"0x3d7398\",\n      \"gasUsed\": \"0x5a80\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n          \"topics\": [\n            \"0x787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n          \"blockNumber\": \"0x200c71b\",\n          \"transactionHash\": \"0xde6e10751f2a3679109c25a571f210858da0812d6635e2702f61da15d5c5a71a\",\n          \"transactionIndex\": \"0x3\",\n          \"logIndex\": \"0x6\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n            \"0x000000000000000000000000f0245f6251bef9447a08766b9da2b07b28ad80b0\"\n          ],\n          \"data\": \"0x0000000000000000000000000000000000000000000000000010763c12030d000000000000000000000000000000000000000000000000002c65c19f3df480000000000000000000000000000000000000000000000004a14bb5ea4318a1ed1d0000000000000000000000000000000000000000000000002c554b632bf173000000000000000000000000000000000000000000000004a14bc6607f2aa4fa1d\",\n          \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n          \"blockNumber\": \"0x200c71b\",\n          \"transactionHash\": \"0xde6e10751f2a3679109c25a571f210858da0812d6635e2702f61da15d5c5a71a\",\n          \"transactionIndex\": \"0x3\",\n          \"logIndex\": \"0x7\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000202000000000000000400000000000000000000000000008000000000000000000000008000000000002000000000000000000080004000000000000000000000800000000000000000000100000000000000020000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000000000000000080000200000000000000000000000000000000000000000000000000000000000004000100000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000001000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0x2e90edd000\"\n    },\n    {\n      \"transactionHash\": \"0x0e0391adbe52ad44a30ee682c4cf270896190b02931b5c421ddc0aafbec0590a\",\n      \"transactionIndex\": \"0x0\",\n      \"blockHash\": \"0x08cdad299d4e2e31c3e1666a4a767c93e414c923af9f10796781e486f44db6d5\",\n      \"blockNumber\": \"0x200c71c\",\n      \"from\": \"0x81fd0E5E7372ED171f421A7C33a4b263Ea9DCc25\",\n      \"to\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"cumulativeGasUsed\": \"0x5aa6\",\n      \"gasUsed\": \"0x5aa6\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n          \"topics\": [\n            \"0xf7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x08cdad299d4e2e31c3e1666a4a767c93e414c923af9f10796781e486f44db6d5\",\n          \"blockNumber\": \"0x200c71c\",\n          \"transactionHash\": \"0x0e0391adbe52ad44a30ee682c4cf270896190b02931b5c421ddc0aafbec0590a\",\n          \"transactionIndex\": \"0x0\",\n          \"logIndex\": \"0x0\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n            \"0x000000000000000000000000f0245f6251bef9447a08766b9da2b07b28ad80b0\"\n          ],\n          \"data\": \"0x00000000000000000000000000000000000000000000000000107d25954feaec0000000000000000000000000000000000000000000000002c554b632bec80000000000000000000000000000000000000000000000004a1515a28ffe513dacd0000000000000000000000000000000000000000000000002c44ce3d969c95140000000000000000000000000000000000000000000004a1516aa6257a63c5b9\",\n          \"blockHash\": \"0x08cdad299d4e2e31c3e1666a4a767c93e414c923af9f10796781e486f44db6d5\",\n          \"blockNumber\": \"0x200c71c\",\n          \"transactionHash\": \"0x0e0391adbe52ad44a30ee682c4cf270896190b02931b5c421ddc0aafbec0590a\",\n          \"transactionIndex\": \"0x0\",\n          \"logIndex\": \"0x1\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000200000000000000000400000000000000000000000000008000000000000000000000008000000000002000000000000000000080004000000000000000000000800000000000000000000100000000000000000000000000000000100000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000080000200000000000000000000000000000000000000000000000000000000000004004100000000000800001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000001000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0x2e90edd000\"\n    }\n  ],\n  \"libraries\": [],\n  \"pending\": [],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/137/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\"\n    }\n  },\n  \"timestamp\": 1664228343,\n  \"commit\": \"af3ba7f\"\n}"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/137/deployExchange-latest.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": \"0x35423c49cb07c9ccecad9af20df52cccdeff0d46f833d438de8b02f2504aed22\",\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n        \"0x4D97DCd97eC945f40cF65F87097ACe5EA0476045\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"gas\": \"0x4d88f0\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b506040516200473f3803806200473f8339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516143386200040760003960006108970152600081816104c801528181612698015281816129450152818161355201526136820152600081816105eb015281816125e3015281816128ed0152818161358e01526136be01526000612258015260006122a701526000612282015260006121db015260006122050152600061222f01526143386000f3fe608060405234801561001057600080fd5b50600436106103365760003560e01c806370480275116101b2578063d798eff6116100f9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610892578063fa950b48146108b9578063fbddd751146108cc578063fe729aaf146108df57600080fd5b8063e60f0c0514610834578063edef7d8e14610847578063f23a6e611461085a57600080fd5b8063e03ac3d0116100d3578063e03ac3d014610806578063e2eec4051461080e578063e50e4f971461082157600080fd5b8063d798eff6146107bd578063d7fb272f146107d0578063d82da838146107f357600080fd5b8063a287bdf11161015b578063b28c51c011610135578063b28c51c01461073b578063bc197c8114610759578063c10f1a751461079d57600080fd5b8063a287bdf114610702578063a6dfcf8614610715578063ac8a584a1461072857600080fd5b806383b8a5ae1161018c57806383b8a5ae146106d45780639870d7fe146106dc578063a10f3dce146106ef57600080fd5b8063704802751461068357806375d7370a146106965780637ecebe00146106b457600080fd5b8063429b62e5116102815780635893253c1161022a578063627cdcb911610204578063627cdcb91461061c578063654f0ce41461062457806368c7450f146106375780636d70f7ae1461064a57600080fd5b80635893253c146105ad5780635c1548fb146105e95780635c975abb1461060f57600080fd5b8063456068d21161025b578063456068d21461052f57806346423aa7146105375780634a2a11f5146105a557600080fd5b8063429b62e5146104f457806344bea37e146105145780634544f0551461051c57600080fd5b80631785f53c116102e357806334600901116102bd57806334600901146104b35780633b521d78146104c65780633d6d3598146104ec57600080fd5b80631785f53c1461042257806324d7806c146104355780632dff692d1461046f57600080fd5b80631031e36e116103145780631031e36e146103ca578063131e7e1c146103d457806313e7c9d8146103f457600080fd5b806301ffc9a71461033b5780630647ee201461036357806306b9d6911461039d575b600080fd5b61034e6103493660046136e2565b6108f2565b60405190151581526020015b60405180910390f35b61034e610371366004613756565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600460205260409020541490565b6103a561098b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161035a565b6103d2610a24565b005b6007546103a59073ffffffffffffffffffffffffffffffffffffffff1681565b610414610402366004613782565b60026020526000908152604090205481565b60405190815260200161035a565b6103d2610430366004613782565b610a78565b61034e610443366004613782565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160208190526040909120541490565b61049c61047d36600461379f565b6008602052600090815260409020805460019091015460ff9091169082565b60408051921515835260208301919091520161035a565b6103d26104c136600461379f565b610b15565b7f00000000000000000000000000000000000000000000000000000000000000006103a5565b6103d2610b5f565b610414610502366004613782565b60016020526000908152604090205481565b610414600081565b6103d261052a366004613782565b610be3565b6103d2610c36565b61058861054536600461379f565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b60408051825115158152602092830151928101929092520161035a565b6103e8610414565b6105d46105bb36600461379f565b6005602052600090815260409020805460019091015482565b6040805192835260208301919091520161035a565b7f00000000000000000000000000000000000000000000000000000000000000006103a5565b60035461034e9060ff1681565b6103d2610c88565b6103d26106323660046139f8565b610c92565b6103d2610645366004613a2d565b610cad565b61034e610658366004613782565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460011490565b6103d2610691366004613782565b610d07565b60075473ffffffffffffffffffffffffffffffffffffffff166103a5565b6104146106c2366004613782565b60046020526000908152604090205481565b6103d2610da7565b6103d26106ea366004613782565b610e2c565b6104146106fd36600461379f565b610eca565b6103a5610710366004613782565b610ee8565b6103d26107233660046139f8565b610f14565b6103d2610736366004613782565b610f1d565b60065473ffffffffffffffffffffffffffffffffffffffff166103a5565b61076c610767366004613ae8565b610fba565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161035a565b6006546103a59073ffffffffffffffffffffffffffffffffffffffff1681565b6103d26107cb366004613c16565b610fe5565b6104146107de36600461379f565b60009081526005602052604090206001015490565b6103d2610801366004613c7a565b6110f5565b6103a5611136565b6103d261081c366004613c9c565b6111a6565b61041461082f3660046139f8565b6111fb565b6103d2610842366004613cd9565b611298565b6103a5610855366004613782565b6113a6565b61076c610868366004613d6b565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b6104147f000000000000000000000000000000000000000000000000000000000000000081565b6103d26108c7366004613dd4565b6113d2565b6103d26108da366004613782565b611409565b6103d26108ed366004613e09565b61145c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000148061098557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600654604080517faaf10f42000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163aaf10f429160048083019260209291908290030181865afa1580156109fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1f9190613e4e565b905090565b3360009081526001602081905260409091205414610a6e576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a7661155e565b565b3360009081526001602081905260409091205414610ac2576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610b5c576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b33600090815260026020526040902054600114610ba8576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610c2d576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5c816115b6565b3360009081526001602081905260409091205414610c80576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a76611644565b610a766001611699565b6000610c9d826111fb565b9050610ca981836116c7565b5050565b3360009081526001602081905260409091205414610cf7576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d02838383611826565b505050565b3360009081526001602081905260409091205414610d51576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610df1576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610e76576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610ed582610b15565b5060009081526005602052604090205490565b600061098582610ef6611136565b60075473ffffffffffffffffffffffffffffffffffffffff16611982565b610b5c81611a80565b3360009081526001602081905260409091205414610f67576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b7fbc197c81000000000000000000000000000000000000000000000000000000005b95945050505050565b600054600203611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6002600081815533815260209190915260409020546001146110a4576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff16156110e1576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ec828233611b85565b50506001600055565b806110ff83610eca565b14610ca9576040517f66f8620a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600754604080517fa619486e000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163a619486e9160048083019260209291908290030181865afa1580156109fb573d6000803e3d6000fd5b6111c58160400151826020015184846101800151856101600151611bde565b610ca9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109857fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e610160015160405160200161127d9d9c9b9a99989796959493929190613eae565b60405160208183030381529060405280519060200120611c3c565b600054600203611304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161104d565b600260008181553381526020919091526040902054600114611352576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff161561138f576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139b84848484611ca5565b505060016000555050565b6000610985826113b461098b565b60065473ffffffffffffffffffffffffffffffffffffffff16611e5c565b805160005b81811015610d02576114018382815181106113f4576113f4613f4c565b6020026020010151611a80565b6001016113d7565b3360009081526001602081905260409091205414611453576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5c81611ebe565b6000546002036114c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161104d565b600260008181553381526020919091526040902054600114611516576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff1615611553576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ec828233611f4c565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b60075460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b336000908152600460205260409020546116b4908290613faa565b3360009081526004602052604090205550565b60008160e001511180156116de5750428160e00151105b15611715576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61171f82826111a6565b6103e88161012001511115611760576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61176d8160800151610b15565b60008281526008602052604090205460ff16156117b6576040517f7b38b76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117f0816020015182610100015173ffffffffffffffffffffffffffffffffffffffff919091166000908152600460205260409020541490565b610ca9576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8183148061183a575082158061183a575081155b15611871576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526005602052604090205415158061189a575060008281526005602052604090205415155b156118d1576040517f3a81d6fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b60008061198e8461205a565b8051906020012090506000856040516020016119c6919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020918201207fff000000000000000000000000000000000000000000000000000000000000008285015260609790971b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021840152603583019690965260558083019490945280518083039094018452607590910190525080519201919091209392505050565b602081015173ffffffffffffffffffffffffffffffffffffffff163314611ad3576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611ade826111fb565b600081815260086020526040902080549192509060ff1615611b2c576040517f7b38b76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b81811015611bd757611bcf858281518110611ba757611ba7613f4c565b6020026020010151858381518110611bc157611bc1613f4c565b602002602001015185611f4c565b600101611b8a565b5050505050565b600080826002811115611bf357611bf3613e6b565b03611c0b57611c04868686866120eb565b9050610fdc565b6002826002811115611c1f57611c1f613e6b565b03611c3057611c0486868686612139565b611c048686868661218d565b6000610985611c496121c1565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080611cb387846122f5565b91509150600080611cc389612342565b91509150611cd78960200151308488612379565b611ce28989886123a3565b611cec84826123f5565b6101208a0151909450600090611d2e90828c61014001516001811115611d1457611d14613e6b565b14611d1f5787611d21565b865b88888e610140015161243d565b9050611d4b308b60200151848489611d469190613fc2565b612379565b611d573033848461252d565b6000611d6284612596565b90508015611d7a57611d7a308c602001518684612379565b60208b8101516040805187815292830186905282018990526060820188905260808201849052309173ffffffffffffffffffffffffffffffffffffffff9091169087907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a46020808c01516040805187815292830186905282018990526060820188905273ffffffffffffffffffffffffffffffffffffffff169086907f63bf4d16b7fa898ef4c4b2b6d90fd201e9c56313b65638af6088d149d2ce956c9060800160405180910390a35050505050505050505050565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b166020820152600090611eb49083908590603401604051602081830303815290604052805190602001206126c6565b90505b9392505050565b60065460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b81600080611f5a86846122f5565b6101208801519193509150600090611fa790825b8961014001516001811115611f8557611f85613e6b565b14611f905785611f92565b845b8960a001518a60c001518b610140015161243d565b9050600080611fb589612342565b91509150611fcf338a60200151838689611d469190613fc2565b611fdf8960200151888489612379565b6020898101516040805185815292830184905282018890526060820187905260808201859052339173ffffffffffffffffffffffffffffffffffffffff9091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a4505050505050505050565b6060604051806101a00160405280610171815260200161419261017191396040805173ffffffffffffffffffffffffffffffffffffffff8516602082015201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526120d59291602001614005565b6040516020818303038152906040529050919050565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561212e575061212e858484612763565b90505b949350505050565b6000612146858484612763565b801561212e57508373ffffffffffffffffffffffffffffffffffffffff1661216d86610ee8565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b600061219a858484612763565b801561212e57508373ffffffffffffffffffffffffffffffffffffffff1661216d866113a6565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561222757507f000000000000000000000000000000000000000000000000000000000000000046145b1561225157507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008061230584606001516127a5565b61230e846111fb565b905061231a81856116c7565b61232d838560a001518660c00151612817565b915061233a81858561283e565b509250929050565b60008080836101400151600181111561235d5761235d613e6b565b0361236d57505060800151600091565b50506080015190600090565b816000036123915761238c8484836128eb565b61239d565b61239d84848484612940565b50505050565b815160005b81811015611bd7576123ed858583815181106123c6576123c6613f4c565b60200260200101518584815181106123e0576123e0613f4c565b602002602001015161296d565b6001016123a8565b60008061240183612596565b905083811015611eb7576040517fdf4d808000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008515610fdc576000612452858585612a52565b905060008111801561246c5750670de0b6b3a76400008111155b1561252357600083600181111561248557612485613e6b565b036124d75761249661271082614034565b866124b2836124ad81670de0b6b3a7640000613fc2565b612ac1565b6124bc908a614034565b6124c69190614034565b6124d09190614071565b9150612523565b6124eb670de0b6b3a7640000612710614034565b86612502836124ad81670de0b6b3a7640000613fc2565b61250c908a614034565b6125169190614034565b6125209190614071565b91505b5095945050505050565b801561239d5761253f84848484612379565b604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff8516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b60008160000361264f576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa15801561262b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098591906140ac565b6040517efdd58e0000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e9060440161260e565b6000806126d38585612ad7565b8051602091820120604080517fff000000000000000000000000000000000000000000000000000000000000008185015260609890981b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021890152603588019590955260558088019190915284518088039091018152607590960190935250508251920191909120919050565b60008373ffffffffffffffffffffffffffffffffffffffff166127868484612c5a565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b73ffffffffffffffffffffffffffffffffffffffff8116158015906127e0575073ffffffffffffffffffffffffffffffffffffffff81163314155b15610b5c576040517f5211a07900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008260000361282957506000611eb7565b826128348386614034565b611eb49190614071565b6000838152600860205260409020600181015490811561285e5781612864565b8360a001515b9150818311156128a0576040517fe2cc6ad600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128aa8383613fc2565b9150816000036128de5780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781555b6001018190559392505050565b7f00000000000000000000000000000000000000000000000000000000000000003073ffffffffffffffffffffffffffffffffffffffff8516036129345761238c818484612c7e565b61239d81858585612c89565b61239d7f000000000000000000000000000000000000000000000000000000000000000085858585612c95565b60006129798484612d41565b9050612986848483612ddd565b8160008061299486846122f5565b61012088015191935091506000906129ac9082611f6e565b90506000806129ba89612342565b915091506129d186868b6020015185858c89612e89565b6020808b01518a820151604080518681529384018590528301899052606083018890526080830186905273ffffffffffffffffffffffffffffffffffffffff9182169291169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a450505050505050505050565b600080826001811115612a6757612a67613e6b565b03612a9f5782600003612a7b576000612a98565b82612a8e670de0b6b3a764000086614034565b612a989190614071565b9050611eb7565b83600003612aae576000611eb4565b83612834670de0b6b3a764000085614034565b6000818310612ad05781611eb7565b5090919050565b6040805160008082526020820190925260609190612af890604481016140c5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f52e831dd000000000000000000000000000000000000000000000000000000001790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe60208201526c010000000000000000000000008502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be60418201526c01000000000000000000000000840260608201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060748201528082604051602001612c41929190614005565b6040516020818303038152906040529250505092915050565b6000806000612c698585612f09565b91509150612c7681612f4e565b509392505050565b610d02838383613101565b61239d848484846131ba565b6040517ff242432a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b158015612d2257600080fd5b505af1158015612d36573d6000803e3d6000fd5b505050505050505050565b6000808361014001516001811115612d5b57612d5b613e6b565b148015612d7e575060008261014001516001811115612d7c57612d7c613e6b565b145b15612d8b57506001610985565b60018361014001516001811115612da457612da4613e6b565b148015612dc7575060018261014001516001811115612dc557612dc5613e6b565b145b15612dd457506002610985565b50600092915050565b612de78383613279565b612e1d576040517f7f9a6f4600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816002811115612e3157612e31613e6b565b03612e77578160800151836080015114610d02576040517fa0b9446500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d02836080015183608001516110f5565b612e958530868a612379565b612ea287878686866132c3565b85612eac84612596565b1015612ee4576040517fdf4d808000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ef4308685611d46858b613fc2565b612f003033858461252d565b50505050505050565b6000808251604103612f3f5760208301516040840151606085015160001a612f338782858561334b565b94509450505050612f47565b506000905060025b9250929050565b6000816004811115612f6257612f62613e6b565b03612f6a5750565b6001816004811115612f7e57612f7e613e6b565b03612fe5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161104d565b6002816004811115612ff957612ff9613e6b565b03613060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161104d565b600381600481111561307457613074613e6b565b03610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161104d565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d116001600051141617169150508061239d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015260640161104d565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080611bd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000604482015260640161104d565b60008260c0015160001480613290575060c0820151155b1561329d57506001610985565b611eb76132a98461343a565b6132b28461343a565b856101400151856101400151613454565b60008160028111156132d7576132d7613e6b565b14611bd75760018160028111156132f0576132f0613e6b565b036133165760008281526005602052604090206001015461331190856134ee565b611bd7565b600281600281111561332a5761332a613e6b565b03611bd757600083815260056020526040902060010154613311908661361e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156133825750600090506003613431565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156133d6573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661342a57600060019250925050613431565b9150600090505b94509492505050565b60006109858260a001518360c00151846101400151612a52565b60008083600181111561346957613469613e6b565b036134ad57600082600181111561348257613482613e6b565b036134a357670de0b6b3a764000061349a8587613faa565b10159050612131565b5082841015612131565b60008260018111156134c1576134c1613e6b565b036134d0575083831015612131565b670de0b6b3a76400006134e38587613faa565b111595945050505050565b60408051600280825260608201835260009260208301908036833701905050905060018160008151811061352457613524613f4c565b60200260200101818152505060028160018151811061354557613545613f4c565b60209081029190910101527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526135f09190600090889087908990600401614116565b600060405180830381600087803b15801561360a57600080fd5b505af1158015612f00573d6000803e3d6000fd5b60408051600280825260608201835260009260208301908036833701905050905060018160008151811061365457613654613f4c565b60200260200101818152505060028160018151811061367557613675613f4c565b60209081029190910101527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639e7212ad7f00000000000000000000000000000000000000000000000000000000000000006135ae565b6000602082840312156136f457600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611eb757600080fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610b5c57600080fd5b803561375181613724565b919050565b6000806040838503121561376957600080fd5b823561377481613724565b946020939093013593505050565b60006020828403121561379457600080fd5b8135611eb781613724565b6000602082840312156137b157600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101a0810167ffffffffffffffff8111828210171561380b5761380b6137b8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613858576138586137b8565b604052919050565b80356002811061375157600080fd5b80356003811061375157600080fd5b600082601f83011261388f57600080fd5b813567ffffffffffffffff8111156138a9576138a96137b8565b6138da60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613811565b8181528460208386010111156138ef57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a0828403121561391f57600080fd5b6139276137e7565b90508135815261393960208301613746565b602082015261394a60408301613746565b604082015261395b60608301613746565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101406139ae818401613860565b908201526101606139c083820161386f565b908201526101808281013567ffffffffffffffff8111156139e057600080fd5b6139ec8582860161387e565b82840152505092915050565b600060208284031215613a0a57600080fd5b813567ffffffffffffffff811115613a2157600080fd5b6121318482850161390c565b600080600060608486031215613a4257600080fd5b505081359360208301359350604090920135919050565b600067ffffffffffffffff821115613a7357613a736137b8565b5060051b60200190565b600082601f830112613a8e57600080fd5b81356020613aa3613a9e83613a59565b613811565b82815260059290921b84018101918181019086841115613ac257600080fd5b8286015b84811015613add5780358352918301918301613ac6565b509695505050505050565b600080600080600060a08688031215613b0057600080fd5b8535613b0b81613724565b94506020860135613b1b81613724565b9350604086013567ffffffffffffffff80821115613b3857600080fd5b613b4489838a01613a7d565b94506060880135915080821115613b5a57600080fd5b613b6689838a01613a7d565b93506080880135915080821115613b7c57600080fd5b50613b898882890161387e565b9150509295509295909350565b600082601f830112613ba757600080fd5b81356020613bb7613a9e83613a59565b82815260059290921b84018101918181019086841115613bd657600080fd5b8286015b84811015613add57803567ffffffffffffffff811115613bfa5760008081fd5b613c088986838b010161390c565b845250918301918301613bda565b60008060408385031215613c2957600080fd5b823567ffffffffffffffff80821115613c4157600080fd5b613c4d86838701613b96565b93506020850135915080821115613c6357600080fd5b50613c7085828601613a7d565b9150509250929050565b60008060408385031215613c8d57600080fd5b50508035926020909101359150565b60008060408385031215613caf57600080fd5b82359150602083013567ffffffffffffffff811115613ccd57600080fd5b613c708582860161390c565b60008060008060808587031215613cef57600080fd5b843567ffffffffffffffff80821115613d0757600080fd5b613d138883890161390c565b95506020870135915080821115613d2957600080fd5b613d3588838901613b96565b9450604087013593506060870135915080821115613d5257600080fd5b50613d5f87828801613a7d565b91505092959194509250565b600080600080600060a08688031215613d8357600080fd5b8535613d8e81613724565b94506020860135613d9e81613724565b93506040860135925060608601359150608086013567ffffffffffffffff811115613dc857600080fd5b613b898882890161387e565b600060208284031215613de657600080fd5b813567ffffffffffffffff811115613dfd57600080fd5b61213184828501613b96565b60008060408385031215613e1c57600080fd5b823567ffffffffffffffff811115613e3357600080fd5b613e3f8582860161390c565b95602094909401359450505050565b600060208284031215613e6057600080fd5b8151611eb781613724565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110613eaa57613eaa613e6b565b9052565b60006101a0820190508e82528d602083015273ffffffffffffffffffffffffffffffffffffffff808e166040840152808d166060840152808c166080840152508960a08301528860c08301528760e083015286610100830152856101208301528461014083015260028410613f2557613f25613e6b565b83610160830152613f3a610180830184613e9a565b9e9d5050505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115613fbd57613fbd613f7b565b500190565b600082821015613fd457613fd4613f7b565b500390565b60005b83811015613ff4578181015183820152602001613fdc565b8381111561239d5750506000910152565b60008351614017818460208801613fd9565b83519083019061402b818360208801613fd9565b01949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561406c5761406c613f7b565b500290565b6000826140a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000602082840312156140be57600080fd5b5051919050565b60208152600082518060208401526140e4816040850160208701613fd9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060a0820173ffffffffffffffffffffffffffffffffffffffff881683526020878185015286604085015260a0606085015281865180845260c086019150828801935060005b818110156141795784518352938301939183019160010161415d565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a264697066735822122056df26e165b5957191bd0ff149c07ae13f5a6b4252973fb3c07a4653cce0f3b164736f6c634300080f00330000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa841740000000000000000000000004d97dcd97ec945f40cf65f87097ace5ea0476045000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x8dedda12c2ee8a8893c436e726bb0112d542455e3db12bddb9a5cd097d8a6d16\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x1107c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x2f62b1db98a1173317d27d8ea06fc8c657b456b4c7c16b0c4955a06d70d9ee3a\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x10169\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0xde6e10751f2a3679109c25a571f210858da0812d6635e2702f61da15d5c5a71a\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x7d00\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x0e0391adbe52ad44a30ee682c4cf270896190b02931b5c421ddc0aafbec0590a\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x7d34\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [\n    {\n      \"transactionHash\": \"0x35423c49cb07c9ccecad9af20df52cccdeff0d46f833d438de8b02f2504aed22\",\n      \"transactionIndex\": \"0x0\",\n      \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n      \"blockNumber\": \"0x200c71b\",\n      \"from\": \"0x81fd0E5E7372ED171f421A7C33a4b263Ea9DCc25\",\n      \"to\": null,\n      \"cumulativeGasUsed\": \"0x3ba46a\",\n      \"gasUsed\": \"0x3ba46a\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"logs\": [\n        {\n          \"address\": \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n          \"topics\": [\n            \"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\",\n            \"0x0000000000000000000000004bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n            \"0x0000000000000000000000004d97dcd97ec945f40cf65f87097ace5ea0476045\"\n          ],\n          \"data\": \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\",\n          \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n          \"blockNumber\": \"0x200c71b\",\n          \"transactionHash\": \"0x35423c49cb07c9ccecad9af20df52cccdeff0d46f833d438de8b02f2504aed22\",\n          \"transactionIndex\": \"0x0\",\n          \"logIndex\": \"0x0\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n            \"0x000000000000000000000000f0245f6251bef9447a08766b9da2b07b28ad80b0\"\n          ],\n          \"data\": \"0x0000000000000000000000000000000000000000000000000ad94eef487522340000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000004a14098d113bc5dcc6d0000000000000000000000000000000000000000000000002ca98bdf551addcc0000000000000000000000000000000000000000000004a14b72200304d2eea1\",\n          \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n          \"blockNumber\": \"0x200c71b\",\n          \"transactionHash\": \"0x35423c49cb07c9ccecad9af20df52cccdeff0d46f833d438de8b02f2504aed22\",\n          \"transactionIndex\": \"0x0\",\n          \"logIndex\": \"0x1\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000000000000000000000400000000000000000000000000008000000000000000000000008000000000000000000080200000000080000000000000000000000200800000000000000000400100000000000000000000000000000000000000000000000000000000000180000000000000000001000000000000000000000000000000000000000000000000000000080000220000000400000008000000000001000000000000000000000000000000004000100000000000000001000000000000000000000000000000100000000000000010008000000000000000000000000000000000000001000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0x2e90edd000\"\n    },\n    {\n      \"transactionHash\": \"0x8dedda12c2ee8a8893c436e726bb0112d542455e3db12bddb9a5cd097d8a6d16\",\n      \"transactionIndex\": \"0x1\",\n      \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n      \"blockNumber\": \"0x200c71b\",\n      \"from\": \"0x81fd0E5E7372ED171f421A7C33a4b263Ea9DCc25\",\n      \"to\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"cumulativeGasUsed\": \"0x3c5ebb\",\n      \"gasUsed\": \"0xba51\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n          \"topics\": [\n            \"0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc\",\n            \"0x000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n          \"blockNumber\": \"0x200c71b\",\n          \"transactionHash\": \"0x8dedda12c2ee8a8893c436e726bb0112d542455e3db12bddb9a5cd097d8a6d16\",\n          \"transactionIndex\": \"0x1\",\n          \"logIndex\": \"0x2\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n            \"0x000000000000000000000000f0245f6251bef9447a08766b9da2b07b28ad80b0\"\n          ],\n          \"data\": \"0x0000000000000000000000000000000000000000000000000021e408a4549f920000000000000000000000000000000000000000000000002ca98bdf51d7e0000000000000000000000000000000000000000000000004a14b72200304d2eea10000000000000000000000000000000000000000000000002c87a7d6ad83406e0000000000000000000000000000000000000000000004a14b94040ba9278e33\",\n          \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n          \"blockNumber\": \"0x200c71b\",\n          \"transactionHash\": \"0x8dedda12c2ee8a8893c436e726bb0112d542455e3db12bddb9a5cd097d8a6d16\",\n          \"transactionIndex\": \"0x1\",\n          \"logIndex\": \"0x3\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000200000000000000000400000000000000000000000000008000000000000000000000008000000000002000000000000000010080004000000000000000000000800000000000000000000100000000000000000000000000000000000000200000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000080000200000000000000000000000000000000000080000000000000000000000004000100000000028000001000000000000000000000000000000100000000000000000000000000000000000000000000100000000000001000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0x2e90edd000\"\n    },\n    {\n      \"transactionHash\": \"0x2f62b1db98a1173317d27d8ea06fc8c657b456b4c7c16b0c4955a06d70d9ee3a\",\n      \"transactionIndex\": \"0x2\",\n      \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n      \"blockNumber\": \"0x200c71b\",\n      \"from\": \"0x81fd0E5E7372ED171f421A7C33a4b263Ea9DCc25\",\n      \"to\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"cumulativeGasUsed\": \"0x3d1918\",\n      \"gasUsed\": \"0xba5d\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n          \"topics\": [\n            \"0xf1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c\",\n            \"0x000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n          \"blockNumber\": \"0x200c71b\",\n          \"transactionHash\": \"0x2f62b1db98a1173317d27d8ea06fc8c657b456b4c7c16b0c4955a06d70d9ee3a\",\n          \"transactionIndex\": \"0x2\",\n          \"logIndex\": \"0x4\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n            \"0x000000000000000000000000f0245f6251bef9447a08766b9da2b07b28ad80b0\"\n          ],\n          \"data\": \"0x0000000000000000000000000000000000000000000000000021e6376f7a5eea0000000000000000000000000000000000000000000000002c87a7d6ad7910000000000000000000000000000000000000000000000004a14b94040ba9278e330000000000000000000000000000000000000000000000002c65c19f3dfeb1160000000000000000000000000000000000000000000004a14bb5ea4318a1ed1d\",\n          \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n          \"blockNumber\": \"0x200c71b\",\n          \"transactionHash\": \"0x2f62b1db98a1173317d27d8ea06fc8c657b456b4c7c16b0c4955a06d70d9ee3a\",\n          \"transactionIndex\": \"0x2\",\n          \"logIndex\": \"0x5\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000200000000000000000400000000000000000000000000008000000000000000000000008000000000002000000000000000010080004000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000082000200000000000000000100000000000000000000000000000000000000000004000100000000028000001000000000000000000000000000000100000000000000000000000000000000000000000000000800000000001000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0x2e90edd000\"\n    },\n    {\n      \"transactionHash\": \"0xde6e10751f2a3679109c25a571f210858da0812d6635e2702f61da15d5c5a71a\",\n      \"transactionIndex\": \"0x3\",\n      \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n      \"blockNumber\": \"0x200c71b\",\n      \"from\": \"0x81fd0E5E7372ED171f421A7C33a4b263Ea9DCc25\",\n      \"to\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"cumulativeGasUsed\": \"0x3d7398\",\n      \"gasUsed\": \"0x5a80\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n          \"topics\": [\n            \"0x787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n          \"blockNumber\": \"0x200c71b\",\n          \"transactionHash\": \"0xde6e10751f2a3679109c25a571f210858da0812d6635e2702f61da15d5c5a71a\",\n          \"transactionIndex\": \"0x3\",\n          \"logIndex\": \"0x6\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n            \"0x000000000000000000000000f0245f6251bef9447a08766b9da2b07b28ad80b0\"\n          ],\n          \"data\": \"0x0000000000000000000000000000000000000000000000000010763c12030d000000000000000000000000000000000000000000000000002c65c19f3df480000000000000000000000000000000000000000000000004a14bb5ea4318a1ed1d0000000000000000000000000000000000000000000000002c554b632bf173000000000000000000000000000000000000000000000004a14bc6607f2aa4fa1d\",\n          \"blockHash\": \"0x3f45f2bf7015fcfcb4d256eadc582456e037c5f5ebd7f2e86fc49bfa44f5202e\",\n          \"blockNumber\": \"0x200c71b\",\n          \"transactionHash\": \"0xde6e10751f2a3679109c25a571f210858da0812d6635e2702f61da15d5c5a71a\",\n          \"transactionIndex\": \"0x3\",\n          \"logIndex\": \"0x7\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000202000000000000000400000000000000000000000000008000000000000000000000008000000000002000000000000000000080004000000000000000000000800000000000000000000100000000000000020000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000000000000000080000200000000000000000000000000000000000000000000000000000000000004000100000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000001000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0x2e90edd000\"\n    },\n    {\n      \"transactionHash\": \"0x0e0391adbe52ad44a30ee682c4cf270896190b02931b5c421ddc0aafbec0590a\",\n      \"transactionIndex\": \"0x0\",\n      \"blockHash\": \"0x08cdad299d4e2e31c3e1666a4a767c93e414c923af9f10796781e486f44db6d5\",\n      \"blockNumber\": \"0x200c71c\",\n      \"from\": \"0x81fd0E5E7372ED171f421A7C33a4b263Ea9DCc25\",\n      \"to\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"cumulativeGasUsed\": \"0x5aa6\",\n      \"gasUsed\": \"0x5aa6\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n          \"topics\": [\n            \"0xf7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x08cdad299d4e2e31c3e1666a4a767c93e414c923af9f10796781e486f44db6d5\",\n          \"blockNumber\": \"0x200c71c\",\n          \"transactionHash\": \"0x0e0391adbe52ad44a30ee682c4cf270896190b02931b5c421ddc0aafbec0590a\",\n          \"transactionIndex\": \"0x0\",\n          \"logIndex\": \"0x0\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000081fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n            \"0x000000000000000000000000f0245f6251bef9447a08766b9da2b07b28ad80b0\"\n          ],\n          \"data\": \"0x00000000000000000000000000000000000000000000000000107d25954feaec0000000000000000000000000000000000000000000000002c554b632bec80000000000000000000000000000000000000000000000004a1515a28ffe513dacd0000000000000000000000000000000000000000000000002c44ce3d969c95140000000000000000000000000000000000000000000004a1516aa6257a63c5b9\",\n          \"blockHash\": \"0x08cdad299d4e2e31c3e1666a4a767c93e414c923af9f10796781e486f44db6d5\",\n          \"blockNumber\": \"0x200c71c\",\n          \"transactionHash\": \"0x0e0391adbe52ad44a30ee682c4cf270896190b02931b5c421ddc0aafbec0590a\",\n          \"transactionIndex\": \"0x0\",\n          \"logIndex\": \"0x1\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000200000000000000000400000000000000000000000000008000000000000000000000008000000000002000000000000000000080004000000000000000000000800000000000000000000100000000000000000000000000000000100000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000080000200000000000000000000000000000000000000000000000000000000000004004100000000000800001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000001000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0x2e90edd000\"\n    }\n  ],\n  \"libraries\": [],\n  \"pending\": [],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/137/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\"\n    }\n  },\n  \"timestamp\": 1664228343,\n  \"commit\": \"af3ba7f\"\n}"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/80001/deployExchange-1663792323.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": \"0xee31daedd823a5bc2134ddf35fa4fb17704349e4892837aa8913e737dd1c0dfb\",\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2E8DCfE708D44ae2e406a1c02DFE2Fa13012f961\",\n        \"0x7D8610E9567d2a6C9FBf66a5A13E9Ba8bb120d43\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x404b2bc72675776b85d9ba64c39af4c0ad18304b\",\n        \"gas\": \"0x4088ed\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b5060405162003b2938038062003b298339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e051610100516101205161014051610160516101805161372262000407600039600061079e01526000818161043401528181611e670152818161203b01528181612a520152612b5d01526000818161055701528181611dd801528181611ff001528181612a810152612b8c01526000611a9601526000611ae501526000611ac001526000611a1901526000611a4301526000611a6d01526137226000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80637048027511610182578063d798eff6116100e9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610799578063fa950b48146107c0578063fbddd751146107d3578063fe729aaf146107e657600080fd5b8063e60f0c0514610754578063edef7d8e14610767578063f23a6e611461077a57600080fd5b8063d798eff6146106dd578063d7fb272f146106f0578063d82da83814610713578063e03ac3d014610726578063e2eec4051461072e578063e50e4f971461074157600080fd5b8063a287bdf11161013b578063a287bdf114610654578063a6dfcf8614610667578063ac8a584a1461067a578063b28c51c01461068d578063bc197c811461069e578063c10f1a75146106ca57600080fd5b806370480275146105e257806375d7370a146105f55780637ecebe001461060657806383b8a5ae146106265780639870d7fe1461062e578063a10f3dce1461064157600080fd5b8063429b62e5116102415780635893253c116101fa578063627cdcb9116101d4578063627cdcb914610588578063654f0ce41461059057806368c7450f146105a35780636d70f7ae146105b657600080fd5b80635893253c146105195780635c1548fb146105555780635c975abb1461057b57600080fd5b8063429b62e51461046057806344bea37e146104805780634544f05514610488578063456068d21461049b57806346423aa7146104a35780634a2a11f51461051157600080fd5b80631785f53c116102935780631785f53c1461039b57806324d7806c146103ae5780632dff692d146103db578063346009011461041f5780633b521d78146104325780633d6d35981461045857600080fd5b806301ffc9a7146102db5780630647ee201461030357806306b9d691146103305780631031e36e14610350578063131e7e1c1461035a57806313e7c9d81461036d575b600080fd5b6102ee6102e9366004612bb0565b6107f9565b60405190151581526020015b60405180910390f35b6102ee610311366004612bff565b6001600160a01b03919091166000908152600460205260409020541490565b610338610830565b6040516001600160a01b0390911681526020016102fa565b6103586108a3565b005b600754610338906001600160a01b031681565b61038d61037b366004612c2b565b60026020526000908152604090205481565b6040519081526020016102fa565b6103586103a9366004612c2b565b6108de565b6102ee6103bc366004612c2b565b6001600160a01b03166000908152600160208190526040909120541490565b6104086103e9366004612c48565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016102fa565b61035861042d366004612c48565b610955565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b610358610986565b61038d61046e366004612c2b565b60016020526000908152604090205481565b61038d600081565b610358610496366004612c2b565b6109f1565b610358610a2b565b6104f46104b1366004612c48565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b6040805182511515815260209283015192810192909252016102fa565b6103e861038d565b610540610527366004612c48565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016102fa565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b6003546102ee9060ff1681565b610358610a64565b61035861059e366004612e48565b610a6e565b6103586105b1366004612e7c565b610a89565b6102ee6105c4366004612c2b565b6001600160a01b031660009081526002602052604090205460011490565b6103586105f0366004612c2b565b610aca565b6007546001600160a01b0316610338565b61038d610614366004612c2b565b60046020526000908152604090205481565b610358610b44565b61035861063c366004612c2b565b610bb0565b61038d61064f366004612c48565b610c28565b610338610662366004612c2b565b610c46565b610358610675366004612e48565b610c65565b610358610688366004612c2b565b610c6e565b6006546001600160a01b0316610338565b6106b16106ac366004612f36565b610ce5565b6040516001600160e01b031990911681526020016102fa565b600654610338906001600160a01b031681565b6103586106eb366004613062565b610cf7565b61038d6106fe366004612c48565b60009081526005602052604090206001015490565b6103586107213660046130c5565b610d8f565b610338610db7565b61035861073c3660046130e7565b610e01565b61038d61074f366004612e48565b610e3d565b610358610762366004613123565b610eda565b610338610775366004612c2b565b610f6c565b6106b16107883660046131b4565b63f23a6e6160e01b95945050505050565b61038d7f000000000000000000000000000000000000000000000000000000000000000081565b6103586107ce36600461321c565b610f8b565b6103586107e1366004612c2b565b610fc2565b6103586107f4366004613250565b610ffc565b60006001600160e01b03198216630271189760e51b148061082a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546040805163557887a160e11b815290516000926001600160a01b03169163aaf10f429160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e9190613294565b905090565b33600090815260016020819052604090912054146108d457604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611082565b565b336000908152600160208190526040909120541461090f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610983576040516307ed98ed60e31b815260040160405180910390fd5b50565b336000908152600260205260409020546001146109b657604051631f0853c160e21b815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610a2257604051637bfa4b9f60e01b815260040160405180910390fd5b610983816110bc565b3360009081526001602081905260409091205414610a5c57604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611118565b6108dc600161114f565b6000610a7982610e3d565b9050610a85818361117d565b5050565b3360009081526001602081905260409091205414610aba57604051637bfa4b9f60e01b815260040160405180910390fd5b610ac583838361126b565b505050565b3360009081526001602081905260409091205414610afb57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610b7557604051637bfa4b9f60e01b815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610be157604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610c3382610955565b5060009081526005602052604090205490565b600061082a82610c54610db7565b6007546001600160a01b0316611395565b610983816113f9565b3360009081526001602081905260409091205414610c9f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b63bc197c8160e01b5b95945050505050565b600054600203610d225760405162461bcd60e51b8152600401610d19906132b1565b60405180910390fd5b600260008181553381526020919091526040902054600114610d5757604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610d7b576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336114a1565b50506001600055565b80610d9983610c28565b14610a855760405163337c310560e11b815260040160405180910390fd5b6007546040805163530ca43760e11b815290516000926001600160a01b03169163a619486e9160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b610e2081604001518260200151848461018001518561016001516114fa565b610a8557604051638baa579f60e01b815260040160405180910390fd5b600061082a7fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e6101600151604051602001610ebf9d9c9b9a999897969594939291906132ff565b60405160208183030381529060405280519060200120611558565b600054600203610efc5760405162461bcd60e51b8152600401610d19906132b1565b600260008181553381526020919091526040902054600114610f3157604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610f55576040516313d0ff5960e31b815260040160405180910390fd5b610f61848484846115a6565b505060016000555050565b600061082a82610f7a610830565b6006546001600160a01b0316611724565b805160005b81811015610ac557610fba838281518110610fad57610fad613391565b60200260200101516113f9565b600101610f90565b3360009081526001602081905260409091205414610ff357604051637bfa4b9f60e01b815260040160405180910390fd5b61098381611773565b60005460020361101e5760405162461bcd60e51b8152600401610d19906132b1565b60026000818155338152602091909152604090205460011461105357604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615611077576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336117cf565b6003805460ff1916600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b6007546040516001600160a01b038084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6003805460ff1916905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b3360009081526004602052604090205461116a9082906133bd565b3360009081526004602052604090205550565b60008160e001511180156111945750428160e00151105b156111b2576040516362b439dd60e11b815260040160405180910390fd5b6111bc8282610e01565b6103e881610120015111156111e45760405163cd4e616760e01b815260040160405180910390fd5b6111f18160800151610955565b60008281526008602052604090205460ff161561122157604051633d9c5bb760e11b815260040160405180910390fd5b61124e81602001518261010001516001600160a01b03919091166000908152600460205260409020541490565b610a8557604051633ab3447f60e11b815260040160405180910390fd5b8183148061127f575082158061127f575081155b1561129d576040516307ed98ed60e31b815260040160405180910390fd5b6000838152600560205260409020541515806112c6575060008281526005602052604090205415155b156112e457604051630ea075bf60e21b815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b6000806113a1846118d2565b8051906020012090506000856040516020016113cc91906001600160a01b0391909116815260200190565b6040516020818303038152906040528051906020012090506113ef848383611938565b9695505050505050565b60208101516001600160a01b03163314611426576040516330cd747160e01b815260040160405180910390fd5b600061143182610e3d565b600081815260086020526040902080549192509060ff161561146657604051633d9c5bb760e11b815260040160405180910390fd5b805460ff1916600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b818110156114f3576114eb8582815181106114c3576114c3613391565b60200260200101518583815181106114dd576114dd613391565b6020026020010151856117cf565b6001016114a6565b5050505050565b60008082600281111561150f5761150f6132d5565b036115275761152086868686611977565b9050610cee565b600282600281111561153b5761153b6132d5565b0361154c57611520868686866119ab565b611520868686866119e5565b600061082a611565611a0c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080806115b58885611b33565b9250925092506000806115c78a611b83565b915091506115db8a60200151308489611bba565b6115e68a8a89611be4565b6115f08582611c36565b6101208b015190955060009061163290828d61014001516001811115611618576116186132d5565b146116235788611625565b875b89898f6101400151611c65565b905061164f308c6020015184848a61164a91906133d5565b611bba565b61165b30338484611d55565b60408051848152602081018490529081018890526060810186905260808101829052309085907f6cda7c3afcd28346af42a5c662af2fbf6678f0af621dabb4b6fa9ee1c3b3c2e99060a00160405180910390a38183857fe914d2271d0909cb9f124ce60596eaa1e20ffc58a6a906ad7d5f9d096cc77fa28a8a6040516116eb929190918252602082015260400190565b60405180910390a460006116fe84611db1565b9050801561171657611716308d602001518684611bba565b505050505050505050505050565b6040516bffffffffffffffffffffffff19606085901b166020820152600090611769908390859060340160405160208183030381529060405280519060200120611e95565b90505b9392505050565b6006546040516001600160a01b038084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b81600080806117de8785611b33565b925092509250600061183b88610120015160006001811115611802576118026132d5565b8a61014001516001811115611819576118196132d5565b146118245786611826565b855b8a60a001518b60c001518c6101400151611c65565b90506000806118498a611b83565b91509150611863338b6020015183868a61164a91906133d5565b6118738a6020015189848a611bba565b60408051838152602081018390529081018890526060810186905260808101849052339085907f6cda7c3afcd28346af42a5c662af2fbf6678f0af621dabb4b6fa9ee1c3b3c2e99060a00160405180910390a350505050505050505050565b6060604051806101a00160405280610171815260200161357c6101719139604080516001600160a01b03851660208201520160408051601f19818403018152908290526119229291602001613418565b6040516020818303038152906040529050919050565b60008060ff60f81b8584866040516020016119569493929190613447565b60408051808303601f19018152919052805160209091012095945050505050565b6000836001600160a01b0316856001600160a01b03161480156119a057506119a0858484611eea565b90505b949350505050565b60006119b8858484611eea565b80156119a05750836001600160a01b03166119d286610c46565b6001600160a01b03161495945050505050565b60006119f2858484611eea565b80156119a05750836001600160a01b03166119d286610f6c565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a6557507f000000000000000000000000000000000000000000000000000000000000000046145b15611a8f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806000611b458560600151611f12565b611b4e85610e3d565b9050611b5a818661117d565b611b6d848660a001518760c00151611f51565b9250611b7a818686611f78565b91509250925092565b600080808361014001516001811115611b9e57611b9e6132d5565b03611bae57505060800151600091565b50506080015190600090565b81600003611bd257611bcd848483611fee565b611bde565b611bde84848484612036565b50505050565b815160005b818110156114f357611c2e85858381518110611c0757611c07613391565b6020026020010151858481518110611c2157611c21613391565b6020026020010151612063565b600101611be9565b600080611c4283611db1565b90508381101561176c576040516301be9b0160e71b815260040160405180910390fd5b60008515610cee576000611c7a858585612140565b9050600081118015611c945750670de0b6b3a76400008111155b15611d4b576000836001811115611cad57611cad6132d5565b03611cff57611cbe61271082613480565b86611cda83611cd581670de0b6b3a76400006133d5565b6121af565b611ce4908a613480565b611cee9190613480565b611cf8919061349f565b9150611d4b565b611d13670de0b6b3a7640000612710613480565b86611d2a83611cd581670de0b6b3a76400006133d5565b611d34908a613480565b611d3e9190613480565b611d48919061349f565b91505b5095945050505050565b8015611bde57611d6784848484611bba565b60408051838152602081018390526001600160a01b038516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b600081600003611e44576040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015611e20573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082a91906134c1565b604051627eeac760e11b8152306004820152602481018390526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90604401611e03565b600080611ea285856121c5565b805190602001209050600060ff60f81b868584604051602001611ec89493929190613447565b60408051808303601f1901815291905280516020909101209695505050505050565b6000836001600160a01b0316611f0084846122dc565b6001600160a01b031614949350505050565b6001600160a01b03811615801590611f3357506001600160a01b0381163314155b1561098357604051635211a07960e01b815260040160405180910390fd5b600082600003611f635750600061176c565b82611f6e8386613480565b611769919061349f565b60008381526008602052604090206001810154908115611f985781611f9e565b8360a001515b915081831115611fc157604051637166356b60e11b815260040160405180910390fd5b611fcb83836133d5565b915081600003611fe157805460ff191660011781555b6001018190559392505050565b7f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b0385160361202a57611bcd818484612300565b611bde8185858561230b565b611bde7f000000000000000000000000000000000000000000000000000000000000000085858585612317565b600061206f848461239d565b905061207c848483612439565b816000808061208b8785611b33565b92509250925060006120af88610120015160006001811115611802576118026132d5565b90506000806120bd8a611b83565b915091506120d487878c6020015185858d896124b3565b6020808c015160408051858152928301849052820189905260608201879052608082018590526001600160a01b03169085907f6cda7c3afcd28346af42a5c662af2fbf6678f0af621dabb4b6fa9ee1c3b3c2e99060a00160405180910390a35050505050505050505050565b600080826001811115612155576121556132d5565b0361218d5782600003612169576000612186565b8261217c670de0b6b3a764000086613480565b612186919061349f565b905061176c565b8360000361219c576000611769565b83611f6e670de0b6b3a764000085613480565b60008183106121be578161176c565b5090919050565b60408051600080825260208201909252606091906121e690604481016134da565b60408051601f19818403018152918152602080830180516001600160e01b03166352e831dd60e01b1790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe6020820152600160601b8502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be6041820152600160601b840260608201526e5af43d82803e903d91602b57fd5bf360881b607482015280826040516020016122c3929190613418565b6040516020818303038152906040529250505092915050565b60008060006122eb858561251a565b915091506122f88161255f565b509392505050565b610ac58383836126a9565b611bde84848484612721565b604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b15801561237e57600080fd5b505af1158015612392573d6000803e3d6000fd5b505050505050505050565b60008083610140015160018111156123b7576123b76132d5565b1480156123da5750600082610140015160018111156123d8576123d86132d5565b145b156123e75750600161082a565b60018361014001516001811115612400576124006132d5565b148015612423575060018261014001516001811115612421576124216132d5565b145b156124305750600261082a565b50600092915050565b61244383836127a4565b61246057604051633fcd37a360e11b815260040160405180910390fd5b6000816002811115612474576124746132d5565b036124a1578160800151836080015114610ac55760405163a0b9446560e01b815260040160405180910390fd5b610ac583608001518360800151610d8f565b6124bf8530868a611bba565b6124cc87878686866127ee565b856124d684611db1565b10156124f5576040516301be9b0160e71b815260040160405180910390fd5b61250530868561164a858b6133d5565b61251130338584611d55565b50505050505050565b60008082516041036125505760208301516040840151606085015160001a61254487828585612876565b94509450505050612558565b506000905060025b9250929050565b6000816004811115612573576125736132d5565b0361257b5750565b600181600481111561258f5761258f6132d5565b036125dc5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610d19565b60028160048111156125f0576125f06132d5565b0361263d5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610d19565b6003816004811115612651576126516132d5565b036109835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610d19565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611bde5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610d19565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806114f35760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610d19565b60008260c00151600014806127bb575060c0820151155b156127c85750600161082a565b61176c6127d48461293a565b6127dd8461293a565b856101400151856101400151612954565b6000816002811115612802576128026132d5565b146114f357600181600281111561281b5761281b6132d5565b036128415760008281526005602052604090206001015461283c90856129ee565b6114f3565b6002816002811115612855576128556132d5565b036114f35760008381526005602052604090206001015461283c9086612af9565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128ad5750600090506003612931565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612901573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661292a57600060019250925050612931565b9150600090505b94509492505050565b600061082a8260a001518360c00151846101400151612140565b600080836001811115612969576129696132d5565b036129ad576000826001811115612982576129826132d5565b036129a357670de0b6b3a764000061299a85876133bd565b101590506119a3565b50828410156119a3565b60008260018111156129c1576129c16132d5565b036129d05750838310156119a3565b670de0b6b3a76400006129e385876133bd565b111595945050505050565b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612a2457612a24613391565b602002602001018181525050600281600181518110612a4557612a45613391565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160e01b031960e084901b168152612acb919060009088908790899060040161350d565b600060405180830381600087803b158015612ae557600080fd5b505af1158015612511573d6000803e3d6000fd5b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612b2f57612b2f613391565b602002602001018181525050600281600181518110612b5057612b50613391565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e7212ad7f0000000000000000000000000000000000000000000000000000000000000000612aa1565b600060208284031215612bc257600080fd5b81356001600160e01b03198116811461176c57600080fd5b6001600160a01b038116811461098357600080fd5b8035612bfa81612bda565b919050565b60008060408385031215612c1257600080fd5b8235612c1d81612bda565b946020939093013593505050565b600060208284031215612c3d57600080fd5b813561176c81612bda565b600060208284031215612c5a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b0381118282101715612c9a57612c9a612c61565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612cc857612cc8612c61565b604052919050565b803560028110612bfa57600080fd5b803560038110612bfa57600080fd5b600082601f830112612cff57600080fd5b81356001600160401b03811115612d1857612d18612c61565b612d2b601f8201601f1916602001612ca0565b818152846020838601011115612d4057600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a08284031215612d7057600080fd5b612d78612c77565b905081358152612d8a60208301612bef565b6020820152612d9b60408301612bef565b6040820152612dac60608301612bef565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140612dff818401612cd0565b90820152610160612e11838201612cdf565b90820152610180828101356001600160401b03811115612e3057600080fd5b612e3c85828601612cee565b82840152505092915050565b600060208284031215612e5a57600080fd5b81356001600160401b03811115612e7057600080fd5b6119a384828501612d5d565b600080600060608486031215612e9157600080fd5b505081359360208301359350604090920135919050565b60006001600160401b03821115612ec157612ec1612c61565b5060051b60200190565b600082601f830112612edc57600080fd5b81356020612ef1612eec83612ea8565b612ca0565b82815260059290921b84018101918181019086841115612f1057600080fd5b8286015b84811015612f2b5780358352918301918301612f14565b509695505050505050565b600080600080600060a08688031215612f4e57600080fd5b8535612f5981612bda565b94506020860135612f6981612bda565b935060408601356001600160401b0380821115612f8557600080fd5b612f9189838a01612ecb565b94506060880135915080821115612fa757600080fd5b612fb389838a01612ecb565b93506080880135915080821115612fc957600080fd5b50612fd688828901612cee565b9150509295509295909350565b600082601f830112612ff457600080fd5b81356020613004612eec83612ea8565b82815260059290921b8401810191818101908684111561302357600080fd5b8286015b84811015612f2b5780356001600160401b038111156130465760008081fd5b6130548986838b0101612d5d565b845250918301918301613027565b6000806040838503121561307557600080fd5b82356001600160401b038082111561308c57600080fd5b61309886838701612fe3565b935060208501359150808211156130ae57600080fd5b506130bb85828601612ecb565b9150509250929050565b600080604083850312156130d857600080fd5b50508035926020909101359150565b600080604083850312156130fa57600080fd5b8235915060208301356001600160401b0381111561311757600080fd5b6130bb85828601612d5d565b6000806000806080858703121561313957600080fd5b84356001600160401b038082111561315057600080fd5b61315c88838901612d5d565b9550602087013591508082111561317257600080fd5b61317e88838901612fe3565b945060408701359350606087013591508082111561319b57600080fd5b506131a887828801612ecb565b91505092959194509250565b600080600080600060a086880312156131cc57600080fd5b85356131d781612bda565b945060208601356131e781612bda565b9350604086013592506060860135915060808601356001600160401b0381111561321057600080fd5b612fd688828901612cee565b60006020828403121561322e57600080fd5b81356001600160401b0381111561324457600080fd5b6119a384828501612fe3565b6000806040838503121561326357600080fd5b82356001600160401b0381111561327957600080fd5b61328585828601612d5d565b95602094909401359450505050565b6000602082840312156132a657600080fd5b815161176c81612bda565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600381106132fb576132fb6132d5565b9052565b8d8152602081018d90526001600160a01b038c811660408301528b811660608301528a16608082015260a0810189905260c0810188905260e081018790526101008101869052610120810185905261014081018490526101a081016002841061336a5761336a6132d5565b8361016083015261337f6101808301846132eb565b9e9d5050505050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156133d0576133d06133a7565b500190565b6000828210156133e7576133e76133a7565b500390565b60005b838110156134075781810151838201526020016133ef565b83811115611bde5750506000910152565b6000835161342a8184602088016133ec565b83519083019061343e8183602088016133ec565b01949350505050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b600081600019048311821515161561349a5761349a6133a7565b500290565b6000826134bc57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156134d357600080fd5b5051919050565b60208152600082518060208401526134f98160408501602087016133ec565b601f01601f19169190910160400192915050565b6001600160a01b038616815260208082018690526040820185905260a06060830181905284519083018190526000918581019160c0850190845b8181101561356357845183529383019391830191600101613547565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a26469706673582212203f57711e1c3b3c9d2d81cac71a38da37ceb66c66b55131f273e99a283ad06a5664736f6c634300080f00330000000000000000000000002e8dcfe708d44ae2e406a1c02dfe2fa13012f9610000000000000000000000007d8610e9567d2a6c9fbf66a5a13e9ba8bb120d43000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x4a8b6a6a0b3604df860d88eaef3e2f6617ab98d701ecbf8b27318b6382b74dfe\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x404b2bc72675776b85d9ba64c39af4c0ad18304b\",\n        \"to\": \"0xdfe02eb6733538f8ea35d585af8de5958ad99e40\",\n        \"gas\": \"0x1107e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0xe747cb68590bd99b3f3db2a2e610606b1f3b08161df677fcc0f1451dff445292\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x404b2bc72675776b85d9ba64c39af4c0ad18304b\",\n        \"to\": \"0xdfe02eb6733538f8ea35d585af8de5958ad99e40\",\n        \"gas\": \"0x110f1\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0xc5096781de50cfe0d1c5157a2e17dfcf0f5412b609fe364fd8a81022c6c09ffe\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x404b2bc72675776b85d9ba64c39af4c0ad18304b\",\n        \"to\": \"0xdfe02eb6733538f8ea35d585af8de5958ad99e40\",\n        \"gas\": \"0x7d3c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x5c47c047ee5a1e05c246bcee2ef2fd69a68ce00dd9839a18a48220ca8989ed9f\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x404b2bc72675776b85d9ba64c39af4c0ad18304b\",\n        \"to\": \"0xdfe02eb6733538f8ea35d585af8de5958ad99e40\",\n        \"gas\": \"0x84d2\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [],\n  \"libraries\": [],\n  \"pending\": [\n    \"0xee31daedd823a5bc2134ddf35fa4fb17704349e4892837aa8913e737dd1c0dfb\",\n    \"0x4a8b6a6a0b3604df860d88eaef3e2f6617ab98d701ecbf8b27318b6382b74dfe\",\n    \"0xe747cb68590bd99b3f3db2a2e610606b1f3b08161df677fcc0f1451dff445292\",\n    \"0xc5096781de50cfe0d1c5157a2e17dfcf0f5412b609fe364fd8a81022c6c09ffe\",\n    \"0x5c47c047ee5a1e05c246bcee2ef2fd69a68ce00dd9839a18a48220ca8989ed9f\"\n  ],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/80001/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\"\n    }\n  },\n  \"timestamp\": 1663792323,\n  \"commit\": \"99d3728\"\n}"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/80001/deployExchange-1663792337.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": \"0xee31daedd823a5bc2134ddf35fa4fb17704349e4892837aa8913e737dd1c0dfb\",\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2E8DCfE708D44ae2e406a1c02DFE2Fa13012f961\",\n        \"0x7D8610E9567d2a6C9FBf66a5A13E9Ba8bb120d43\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x404b2bc72675776b85d9ba64c39af4c0ad18304b\",\n        \"gas\": \"0x4088ed\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b5060405162003b2938038062003b298339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e051610100516101205161014051610160516101805161372262000407600039600061079e01526000818161043401528181611e670152818161203b01528181612a520152612b5d01526000818161055701528181611dd801528181611ff001528181612a810152612b8c01526000611a9601526000611ae501526000611ac001526000611a1901526000611a4301526000611a6d01526137226000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80637048027511610182578063d798eff6116100e9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610799578063fa950b48146107c0578063fbddd751146107d3578063fe729aaf146107e657600080fd5b8063e60f0c0514610754578063edef7d8e14610767578063f23a6e611461077a57600080fd5b8063d798eff6146106dd578063d7fb272f146106f0578063d82da83814610713578063e03ac3d014610726578063e2eec4051461072e578063e50e4f971461074157600080fd5b8063a287bdf11161013b578063a287bdf114610654578063a6dfcf8614610667578063ac8a584a1461067a578063b28c51c01461068d578063bc197c811461069e578063c10f1a75146106ca57600080fd5b806370480275146105e257806375d7370a146105f55780637ecebe001461060657806383b8a5ae146106265780639870d7fe1461062e578063a10f3dce1461064157600080fd5b8063429b62e5116102415780635893253c116101fa578063627cdcb9116101d4578063627cdcb914610588578063654f0ce41461059057806368c7450f146105a35780636d70f7ae146105b657600080fd5b80635893253c146105195780635c1548fb146105555780635c975abb1461057b57600080fd5b8063429b62e51461046057806344bea37e146104805780634544f05514610488578063456068d21461049b57806346423aa7146104a35780634a2a11f51461051157600080fd5b80631785f53c116102935780631785f53c1461039b57806324d7806c146103ae5780632dff692d146103db578063346009011461041f5780633b521d78146104325780633d6d35981461045857600080fd5b806301ffc9a7146102db5780630647ee201461030357806306b9d691146103305780631031e36e14610350578063131e7e1c1461035a57806313e7c9d81461036d575b600080fd5b6102ee6102e9366004612bb0565b6107f9565b60405190151581526020015b60405180910390f35b6102ee610311366004612bff565b6001600160a01b03919091166000908152600460205260409020541490565b610338610830565b6040516001600160a01b0390911681526020016102fa565b6103586108a3565b005b600754610338906001600160a01b031681565b61038d61037b366004612c2b565b60026020526000908152604090205481565b6040519081526020016102fa565b6103586103a9366004612c2b565b6108de565b6102ee6103bc366004612c2b565b6001600160a01b03166000908152600160208190526040909120541490565b6104086103e9366004612c48565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016102fa565b61035861042d366004612c48565b610955565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b610358610986565b61038d61046e366004612c2b565b60016020526000908152604090205481565b61038d600081565b610358610496366004612c2b565b6109f1565b610358610a2b565b6104f46104b1366004612c48565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b6040805182511515815260209283015192810192909252016102fa565b6103e861038d565b610540610527366004612c48565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016102fa565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b6003546102ee9060ff1681565b610358610a64565b61035861059e366004612e48565b610a6e565b6103586105b1366004612e7c565b610a89565b6102ee6105c4366004612c2b565b6001600160a01b031660009081526002602052604090205460011490565b6103586105f0366004612c2b565b610aca565b6007546001600160a01b0316610338565b61038d610614366004612c2b565b60046020526000908152604090205481565b610358610b44565b61035861063c366004612c2b565b610bb0565b61038d61064f366004612c48565b610c28565b610338610662366004612c2b565b610c46565b610358610675366004612e48565b610c65565b610358610688366004612c2b565b610c6e565b6006546001600160a01b0316610338565b6106b16106ac366004612f36565b610ce5565b6040516001600160e01b031990911681526020016102fa565b600654610338906001600160a01b031681565b6103586106eb366004613062565b610cf7565b61038d6106fe366004612c48565b60009081526005602052604090206001015490565b6103586107213660046130c5565b610d8f565b610338610db7565b61035861073c3660046130e7565b610e01565b61038d61074f366004612e48565b610e3d565b610358610762366004613123565b610eda565b610338610775366004612c2b565b610f6c565b6106b16107883660046131b4565b63f23a6e6160e01b95945050505050565b61038d7f000000000000000000000000000000000000000000000000000000000000000081565b6103586107ce36600461321c565b610f8b565b6103586107e1366004612c2b565b610fc2565b6103586107f4366004613250565b610ffc565b60006001600160e01b03198216630271189760e51b148061082a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546040805163557887a160e11b815290516000926001600160a01b03169163aaf10f429160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e9190613294565b905090565b33600090815260016020819052604090912054146108d457604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611082565b565b336000908152600160208190526040909120541461090f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610983576040516307ed98ed60e31b815260040160405180910390fd5b50565b336000908152600260205260409020546001146109b657604051631f0853c160e21b815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610a2257604051637bfa4b9f60e01b815260040160405180910390fd5b610983816110bc565b3360009081526001602081905260409091205414610a5c57604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611118565b6108dc600161114f565b6000610a7982610e3d565b9050610a85818361117d565b5050565b3360009081526001602081905260409091205414610aba57604051637bfa4b9f60e01b815260040160405180910390fd5b610ac583838361126b565b505050565b3360009081526001602081905260409091205414610afb57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610b7557604051637bfa4b9f60e01b815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610be157604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610c3382610955565b5060009081526005602052604090205490565b600061082a82610c54610db7565b6007546001600160a01b0316611395565b610983816113f9565b3360009081526001602081905260409091205414610c9f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b63bc197c8160e01b5b95945050505050565b600054600203610d225760405162461bcd60e51b8152600401610d19906132b1565b60405180910390fd5b600260008181553381526020919091526040902054600114610d5757604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610d7b576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336114a1565b50506001600055565b80610d9983610c28565b14610a855760405163337c310560e11b815260040160405180910390fd5b6007546040805163530ca43760e11b815290516000926001600160a01b03169163a619486e9160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b610e2081604001518260200151848461018001518561016001516114fa565b610a8557604051638baa579f60e01b815260040160405180910390fd5b600061082a7fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e6101600151604051602001610ebf9d9c9b9a999897969594939291906132ff565b60405160208183030381529060405280519060200120611558565b600054600203610efc5760405162461bcd60e51b8152600401610d19906132b1565b600260008181553381526020919091526040902054600114610f3157604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610f55576040516313d0ff5960e31b815260040160405180910390fd5b610f61848484846115a6565b505060016000555050565b600061082a82610f7a610830565b6006546001600160a01b0316611724565b805160005b81811015610ac557610fba838281518110610fad57610fad613391565b60200260200101516113f9565b600101610f90565b3360009081526001602081905260409091205414610ff357604051637bfa4b9f60e01b815260040160405180910390fd5b61098381611773565b60005460020361101e5760405162461bcd60e51b8152600401610d19906132b1565b60026000818155338152602091909152604090205460011461105357604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615611077576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336117cf565b6003805460ff1916600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b6007546040516001600160a01b038084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6003805460ff1916905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b3360009081526004602052604090205461116a9082906133bd565b3360009081526004602052604090205550565b60008160e001511180156111945750428160e00151105b156111b2576040516362b439dd60e11b815260040160405180910390fd5b6111bc8282610e01565b6103e881610120015111156111e45760405163cd4e616760e01b815260040160405180910390fd5b6111f18160800151610955565b60008281526008602052604090205460ff161561122157604051633d9c5bb760e11b815260040160405180910390fd5b61124e81602001518261010001516001600160a01b03919091166000908152600460205260409020541490565b610a8557604051633ab3447f60e11b815260040160405180910390fd5b8183148061127f575082158061127f575081155b1561129d576040516307ed98ed60e31b815260040160405180910390fd5b6000838152600560205260409020541515806112c6575060008281526005602052604090205415155b156112e457604051630ea075bf60e21b815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b6000806113a1846118d2565b8051906020012090506000856040516020016113cc91906001600160a01b0391909116815260200190565b6040516020818303038152906040528051906020012090506113ef848383611938565b9695505050505050565b60208101516001600160a01b03163314611426576040516330cd747160e01b815260040160405180910390fd5b600061143182610e3d565b600081815260086020526040902080549192509060ff161561146657604051633d9c5bb760e11b815260040160405180910390fd5b805460ff1916600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b818110156114f3576114eb8582815181106114c3576114c3613391565b60200260200101518583815181106114dd576114dd613391565b6020026020010151856117cf565b6001016114a6565b5050505050565b60008082600281111561150f5761150f6132d5565b036115275761152086868686611977565b9050610cee565b600282600281111561153b5761153b6132d5565b0361154c57611520868686866119ab565b611520868686866119e5565b600061082a611565611a0c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080806115b58885611b33565b9250925092506000806115c78a611b83565b915091506115db8a60200151308489611bba565b6115e68a8a89611be4565b6115f08582611c36565b6101208b015190955060009061163290828d61014001516001811115611618576116186132d5565b146116235788611625565b875b89898f6101400151611c65565b905061164f308c6020015184848a61164a91906133d5565b611bba565b61165b30338484611d55565b60408051848152602081018490529081018890526060810186905260808101829052309085907f6cda7c3afcd28346af42a5c662af2fbf6678f0af621dabb4b6fa9ee1c3b3c2e99060a00160405180910390a38183857fe914d2271d0909cb9f124ce60596eaa1e20ffc58a6a906ad7d5f9d096cc77fa28a8a6040516116eb929190918252602082015260400190565b60405180910390a460006116fe84611db1565b9050801561171657611716308d602001518684611bba565b505050505050505050505050565b6040516bffffffffffffffffffffffff19606085901b166020820152600090611769908390859060340160405160208183030381529060405280519060200120611e95565b90505b9392505050565b6006546040516001600160a01b038084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b81600080806117de8785611b33565b925092509250600061183b88610120015160006001811115611802576118026132d5565b8a61014001516001811115611819576118196132d5565b146118245786611826565b855b8a60a001518b60c001518c6101400151611c65565b90506000806118498a611b83565b91509150611863338b6020015183868a61164a91906133d5565b6118738a6020015189848a611bba565b60408051838152602081018390529081018890526060810186905260808101849052339085907f6cda7c3afcd28346af42a5c662af2fbf6678f0af621dabb4b6fa9ee1c3b3c2e99060a00160405180910390a350505050505050505050565b6060604051806101a00160405280610171815260200161357c6101719139604080516001600160a01b03851660208201520160408051601f19818403018152908290526119229291602001613418565b6040516020818303038152906040529050919050565b60008060ff60f81b8584866040516020016119569493929190613447565b60408051808303601f19018152919052805160209091012095945050505050565b6000836001600160a01b0316856001600160a01b03161480156119a057506119a0858484611eea565b90505b949350505050565b60006119b8858484611eea565b80156119a05750836001600160a01b03166119d286610c46565b6001600160a01b03161495945050505050565b60006119f2858484611eea565b80156119a05750836001600160a01b03166119d286610f6c565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a6557507f000000000000000000000000000000000000000000000000000000000000000046145b15611a8f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806000611b458560600151611f12565b611b4e85610e3d565b9050611b5a818661117d565b611b6d848660a001518760c00151611f51565b9250611b7a818686611f78565b91509250925092565b600080808361014001516001811115611b9e57611b9e6132d5565b03611bae57505060800151600091565b50506080015190600090565b81600003611bd257611bcd848483611fee565b611bde565b611bde84848484612036565b50505050565b815160005b818110156114f357611c2e85858381518110611c0757611c07613391565b6020026020010151858481518110611c2157611c21613391565b6020026020010151612063565b600101611be9565b600080611c4283611db1565b90508381101561176c576040516301be9b0160e71b815260040160405180910390fd5b60008515610cee576000611c7a858585612140565b9050600081118015611c945750670de0b6b3a76400008111155b15611d4b576000836001811115611cad57611cad6132d5565b03611cff57611cbe61271082613480565b86611cda83611cd581670de0b6b3a76400006133d5565b6121af565b611ce4908a613480565b611cee9190613480565b611cf8919061349f565b9150611d4b565b611d13670de0b6b3a7640000612710613480565b86611d2a83611cd581670de0b6b3a76400006133d5565b611d34908a613480565b611d3e9190613480565b611d48919061349f565b91505b5095945050505050565b8015611bde57611d6784848484611bba565b60408051838152602081018390526001600160a01b038516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b600081600003611e44576040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015611e20573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082a91906134c1565b604051627eeac760e11b8152306004820152602481018390526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90604401611e03565b600080611ea285856121c5565b805190602001209050600060ff60f81b868584604051602001611ec89493929190613447565b60408051808303601f1901815291905280516020909101209695505050505050565b6000836001600160a01b0316611f0084846122dc565b6001600160a01b031614949350505050565b6001600160a01b03811615801590611f3357506001600160a01b0381163314155b1561098357604051635211a07960e01b815260040160405180910390fd5b600082600003611f635750600061176c565b82611f6e8386613480565b611769919061349f565b60008381526008602052604090206001810154908115611f985781611f9e565b8360a001515b915081831115611fc157604051637166356b60e11b815260040160405180910390fd5b611fcb83836133d5565b915081600003611fe157805460ff191660011781555b6001018190559392505050565b7f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b0385160361202a57611bcd818484612300565b611bde8185858561230b565b611bde7f000000000000000000000000000000000000000000000000000000000000000085858585612317565b600061206f848461239d565b905061207c848483612439565b816000808061208b8785611b33565b92509250925060006120af88610120015160006001811115611802576118026132d5565b90506000806120bd8a611b83565b915091506120d487878c6020015185858d896124b3565b6020808c015160408051858152928301849052820189905260608201879052608082018590526001600160a01b03169085907f6cda7c3afcd28346af42a5c662af2fbf6678f0af621dabb4b6fa9ee1c3b3c2e99060a00160405180910390a35050505050505050505050565b600080826001811115612155576121556132d5565b0361218d5782600003612169576000612186565b8261217c670de0b6b3a764000086613480565b612186919061349f565b905061176c565b8360000361219c576000611769565b83611f6e670de0b6b3a764000085613480565b60008183106121be578161176c565b5090919050565b60408051600080825260208201909252606091906121e690604481016134da565b60408051601f19818403018152918152602080830180516001600160e01b03166352e831dd60e01b1790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe6020820152600160601b8502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be6041820152600160601b840260608201526e5af43d82803e903d91602b57fd5bf360881b607482015280826040516020016122c3929190613418565b6040516020818303038152906040529250505092915050565b60008060006122eb858561251a565b915091506122f88161255f565b509392505050565b610ac58383836126a9565b611bde84848484612721565b604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b15801561237e57600080fd5b505af1158015612392573d6000803e3d6000fd5b505050505050505050565b60008083610140015160018111156123b7576123b76132d5565b1480156123da5750600082610140015160018111156123d8576123d86132d5565b145b156123e75750600161082a565b60018361014001516001811115612400576124006132d5565b148015612423575060018261014001516001811115612421576124216132d5565b145b156124305750600261082a565b50600092915050565b61244383836127a4565b61246057604051633fcd37a360e11b815260040160405180910390fd5b6000816002811115612474576124746132d5565b036124a1578160800151836080015114610ac55760405163a0b9446560e01b815260040160405180910390fd5b610ac583608001518360800151610d8f565b6124bf8530868a611bba565b6124cc87878686866127ee565b856124d684611db1565b10156124f5576040516301be9b0160e71b815260040160405180910390fd5b61250530868561164a858b6133d5565b61251130338584611d55565b50505050505050565b60008082516041036125505760208301516040840151606085015160001a61254487828585612876565b94509450505050612558565b506000905060025b9250929050565b6000816004811115612573576125736132d5565b0361257b5750565b600181600481111561258f5761258f6132d5565b036125dc5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610d19565b60028160048111156125f0576125f06132d5565b0361263d5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610d19565b6003816004811115612651576126516132d5565b036109835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610d19565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611bde5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610d19565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806114f35760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610d19565b60008260c00151600014806127bb575060c0820151155b156127c85750600161082a565b61176c6127d48461293a565b6127dd8461293a565b856101400151856101400151612954565b6000816002811115612802576128026132d5565b146114f357600181600281111561281b5761281b6132d5565b036128415760008281526005602052604090206001015461283c90856129ee565b6114f3565b6002816002811115612855576128556132d5565b036114f35760008381526005602052604090206001015461283c9086612af9565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128ad5750600090506003612931565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612901573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661292a57600060019250925050612931565b9150600090505b94509492505050565b600061082a8260a001518360c00151846101400151612140565b600080836001811115612969576129696132d5565b036129ad576000826001811115612982576129826132d5565b036129a357670de0b6b3a764000061299a85876133bd565b101590506119a3565b50828410156119a3565b60008260018111156129c1576129c16132d5565b036129d05750838310156119a3565b670de0b6b3a76400006129e385876133bd565b111595945050505050565b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612a2457612a24613391565b602002602001018181525050600281600181518110612a4557612a45613391565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160e01b031960e084901b168152612acb919060009088908790899060040161350d565b600060405180830381600087803b158015612ae557600080fd5b505af1158015612511573d6000803e3d6000fd5b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612b2f57612b2f613391565b602002602001018181525050600281600181518110612b5057612b50613391565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e7212ad7f0000000000000000000000000000000000000000000000000000000000000000612aa1565b600060208284031215612bc257600080fd5b81356001600160e01b03198116811461176c57600080fd5b6001600160a01b038116811461098357600080fd5b8035612bfa81612bda565b919050565b60008060408385031215612c1257600080fd5b8235612c1d81612bda565b946020939093013593505050565b600060208284031215612c3d57600080fd5b813561176c81612bda565b600060208284031215612c5a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b0381118282101715612c9a57612c9a612c61565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612cc857612cc8612c61565b604052919050565b803560028110612bfa57600080fd5b803560038110612bfa57600080fd5b600082601f830112612cff57600080fd5b81356001600160401b03811115612d1857612d18612c61565b612d2b601f8201601f1916602001612ca0565b818152846020838601011115612d4057600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a08284031215612d7057600080fd5b612d78612c77565b905081358152612d8a60208301612bef565b6020820152612d9b60408301612bef565b6040820152612dac60608301612bef565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140612dff818401612cd0565b90820152610160612e11838201612cdf565b90820152610180828101356001600160401b03811115612e3057600080fd5b612e3c85828601612cee565b82840152505092915050565b600060208284031215612e5a57600080fd5b81356001600160401b03811115612e7057600080fd5b6119a384828501612d5d565b600080600060608486031215612e9157600080fd5b505081359360208301359350604090920135919050565b60006001600160401b03821115612ec157612ec1612c61565b5060051b60200190565b600082601f830112612edc57600080fd5b81356020612ef1612eec83612ea8565b612ca0565b82815260059290921b84018101918181019086841115612f1057600080fd5b8286015b84811015612f2b5780358352918301918301612f14565b509695505050505050565b600080600080600060a08688031215612f4e57600080fd5b8535612f5981612bda565b94506020860135612f6981612bda565b935060408601356001600160401b0380821115612f8557600080fd5b612f9189838a01612ecb565b94506060880135915080821115612fa757600080fd5b612fb389838a01612ecb565b93506080880135915080821115612fc957600080fd5b50612fd688828901612cee565b9150509295509295909350565b600082601f830112612ff457600080fd5b81356020613004612eec83612ea8565b82815260059290921b8401810191818101908684111561302357600080fd5b8286015b84811015612f2b5780356001600160401b038111156130465760008081fd5b6130548986838b0101612d5d565b845250918301918301613027565b6000806040838503121561307557600080fd5b82356001600160401b038082111561308c57600080fd5b61309886838701612fe3565b935060208501359150808211156130ae57600080fd5b506130bb85828601612ecb565b9150509250929050565b600080604083850312156130d857600080fd5b50508035926020909101359150565b600080604083850312156130fa57600080fd5b8235915060208301356001600160401b0381111561311757600080fd5b6130bb85828601612d5d565b6000806000806080858703121561313957600080fd5b84356001600160401b038082111561315057600080fd5b61315c88838901612d5d565b9550602087013591508082111561317257600080fd5b61317e88838901612fe3565b945060408701359350606087013591508082111561319b57600080fd5b506131a887828801612ecb565b91505092959194509250565b600080600080600060a086880312156131cc57600080fd5b85356131d781612bda565b945060208601356131e781612bda565b9350604086013592506060860135915060808601356001600160401b0381111561321057600080fd5b612fd688828901612cee565b60006020828403121561322e57600080fd5b81356001600160401b0381111561324457600080fd5b6119a384828501612fe3565b6000806040838503121561326357600080fd5b82356001600160401b0381111561327957600080fd5b61328585828601612d5d565b95602094909401359450505050565b6000602082840312156132a657600080fd5b815161176c81612bda565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600381106132fb576132fb6132d5565b9052565b8d8152602081018d90526001600160a01b038c811660408301528b811660608301528a16608082015260a0810189905260c0810188905260e081018790526101008101869052610120810185905261014081018490526101a081016002841061336a5761336a6132d5565b8361016083015261337f6101808301846132eb565b9e9d5050505050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156133d0576133d06133a7565b500190565b6000828210156133e7576133e76133a7565b500390565b60005b838110156134075781810151838201526020016133ef565b83811115611bde5750506000910152565b6000835161342a8184602088016133ec565b83519083019061343e8183602088016133ec565b01949350505050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b600081600019048311821515161561349a5761349a6133a7565b500290565b6000826134bc57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156134d357600080fd5b5051919050565b60208152600082518060208401526134f98160408501602087016133ec565b601f01601f19169190910160400192915050565b6001600160a01b038616815260208082018690526040820185905260a06060830181905284519083018190526000918581019160c0850190845b8181101561356357845183529383019391830191600101613547565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a26469706673582212203f57711e1c3b3c9d2d81cac71a38da37ceb66c66b55131f273e99a283ad06a5664736f6c634300080f00330000000000000000000000002e8dcfe708d44ae2e406a1c02dfe2fa13012f9610000000000000000000000007d8610e9567d2a6c9fbf66a5a13e9ba8bb120d43000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x4a8b6a6a0b3604df860d88eaef3e2f6617ab98d701ecbf8b27318b6382b74dfe\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x404b2bc72675776b85d9ba64c39af4c0ad18304b\",\n        \"to\": \"0xdfe02eb6733538f8ea35d585af8de5958ad99e40\",\n        \"gas\": \"0x1107e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0xe747cb68590bd99b3f3db2a2e610606b1f3b08161df677fcc0f1451dff445292\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x404b2bc72675776b85d9ba64c39af4c0ad18304b\",\n        \"to\": \"0xdfe02eb6733538f8ea35d585af8de5958ad99e40\",\n        \"gas\": \"0x110f1\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0xc5096781de50cfe0d1c5157a2e17dfcf0f5412b609fe364fd8a81022c6c09ffe\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x404b2bc72675776b85d9ba64c39af4c0ad18304b\",\n        \"to\": \"0xdfe02eb6733538f8ea35d585af8de5958ad99e40\",\n        \"gas\": \"0x7d3c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x5c47c047ee5a1e05c246bcee2ef2fd69a68ce00dd9839a18a48220ca8989ed9f\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x404b2bc72675776b85d9ba64c39af4c0ad18304b\",\n        \"to\": \"0xdfe02eb6733538f8ea35d585af8de5958ad99e40\",\n        \"gas\": \"0x84d2\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [\n    {\n      \"transactionHash\": \"0xee31daedd823a5bc2134ddf35fa4fb17704349e4892837aa8913e737dd1c0dfb\",\n      \"transactionIndex\": \"0x2\",\n      \"blockHash\": \"0xce7917e37585ad043a3da7b54488c7e0789dd3c0af184bebb289762819bc0b9d\",\n      \"blockNumber\": \"0x1aead92\",\n      \"from\": \"0x404B2bC72675776B85d9BA64c39af4C0AD18304b\",\n      \"to\": null,\n      \"cumulativeGasUsed\": \"0x348867\",\n      \"gasUsed\": \"0x31a468\",\n      \"contractAddress\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n      \"logs\": [\n        {\n          \"address\": \"0x2E8DCfE708D44ae2e406a1c02DFE2Fa13012f961\",\n          \"topics\": [\n            \"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\",\n            \"0x000000000000000000000000dfe02eb6733538f8ea35d585af8de5958ad99e40\",\n            \"0x0000000000000000000000007d8610e9567d2a6c9fbf66a5a13e9ba8bb120d43\"\n          ],\n          \"data\": \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\",\n          \"blockHash\": \"0xce7917e37585ad043a3da7b54488c7e0789dd3c0af184bebb289762819bc0b9d\",\n          \"blockNumber\": \"0x1aead92\",\n          \"transactionHash\": \"0xee31daedd823a5bc2134ddf35fa4fb17704349e4892837aa8913e737dd1c0dfb\",\n          \"transactionIndex\": \"0x2\",\n          \"logIndex\": \"0x4\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x000000000000000000000000404b2bc72675776b85d9ba64c39af4c0ad18304b\",\n            \"0x000000000000000000000000be188d6641e8b680743a4815dfa0f6208038960f\"\n          ],\n          \"data\": \"0x0000000000000000000000000000000000000000000000000022acb81ede3000000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000025853de7eff343f48bf9000000000000000000000000000000000000000000000000056a69295749d0000000000000000000000000000000000000000000000025853e0a9cab62d2bbf9\",\n          \"blockHash\": \"0xce7917e37585ad043a3da7b54488c7e0789dd3c0af184bebb289762819bc0b9d\",\n          \"blockNumber\": \"0x1aead92\",\n          \"transactionHash\": \"0xee31daedd823a5bc2134ddf35fa4fb17704349e4892837aa8913e737dd1c0dfb\",\n          \"transactionIndex\": \"0x2\",\n          \"logIndex\": \"0x5\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00008000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000080008000000000000000000000200000001000000000000000000000000000800000000000000000000100000000004000000000000020000000000000000008000000000000000080040000000000000000000000000000000000000000000000000000000080000000000000000000220000000000002000000000000000000000000000000000000000020000004000000000000000000001000400000000000000000000000000100040000000000010000000000000000000000000000000000000000000001000000001100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0xb2d05e0e\"\n    },\n    {\n      \"transactionHash\": \"0x4a8b6a6a0b3604df860d88eaef3e2f6617ab98d701ecbf8b27318b6382b74dfe\",\n      \"transactionIndex\": \"0x3\",\n      \"blockHash\": \"0xce7917e37585ad043a3da7b54488c7e0789dd3c0af184bebb289762819bc0b9d\",\n      \"blockNumber\": \"0x1aead92\",\n      \"from\": \"0x404B2bC72675776B85d9BA64c39af4C0AD18304b\",\n      \"to\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n      \"cumulativeGasUsed\": \"0x3542b9\",\n      \"gasUsed\": \"0xba52\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n          \"topics\": [\n            \"0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc\",\n            \"0x000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n            \"0x000000000000000000000000404b2bc72675776b85d9ba64c39af4c0ad18304b\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0xce7917e37585ad043a3da7b54488c7e0789dd3c0af184bebb289762819bc0b9d\",\n          \"blockNumber\": \"0x1aead92\",\n          \"transactionHash\": \"0x4a8b6a6a0b3604df860d88eaef3e2f6617ab98d701ecbf8b27318b6382b74dfe\",\n          \"transactionIndex\": \"0x3\",\n          \"logIndex\": \"0x6\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x000000000000000000000000404b2bc72675776b85d9ba64c39af4c0ad18304b\",\n            \"0x000000000000000000000000be188d6641e8b680743a4815dfa0f6208038960f\"\n          ],\n          \"data\": \"0x00000000000000000000000000000000000000000000000000008224ab0a1c00000000000000000000000000000000000000000000000000056a69295492d2500000000000000000000000000000000000000000000025853e0a9cab62d2bbf90000000000000000000000000000000000000000000000000569e704a988b6500000000000000000000000000000000000000000000025853e0b1ed00ddcd7f9\",\n          \"blockHash\": \"0xce7917e37585ad043a3da7b54488c7e0789dd3c0af184bebb289762819bc0b9d\",\n          \"blockNumber\": \"0x1aead92\",\n          \"transactionHash\": \"0x4a8b6a6a0b3604df860d88eaef3e2f6617ab98d701ecbf8b27318b6382b74dfe\",\n          \"transactionIndex\": \"0x3\",\n          \"logIndex\": \"0x7\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000010000000000000000000000000000800000000000000000000100002000004000000000000000000000000000200008000000000000000080040000000000000000000000000000000000000000000000080000000080000000000000000000200000000000002000000000000000000000080000000000000000000000004000000000020028000001000000000000000000000000000000100040000000000000000000000000000000000000000100000000000000000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0xb2d05e0e\"\n    },\n    {\n      \"transactionHash\": \"0xe747cb68590bd99b3f3db2a2e610606b1f3b08161df677fcc0f1451dff445292\",\n      \"transactionIndex\": \"0x4\",\n      \"blockHash\": \"0xce7917e37585ad043a3da7b54488c7e0789dd3c0af184bebb289762819bc0b9d\",\n      \"blockNumber\": \"0x1aead92\",\n      \"from\": \"0x404B2bC72675776B85d9BA64c39af4C0AD18304b\",\n      \"to\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n      \"cumulativeGasUsed\": \"0x35fd5a\",\n      \"gasUsed\": \"0xbaa1\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n          \"topics\": [\n            \"0xf1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c\",\n            \"0x000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n            \"0x000000000000000000000000404b2bc72675776b85d9ba64c39af4c0ad18304b\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0xce7917e37585ad043a3da7b54488c7e0789dd3c0af184bebb289762819bc0b9d\",\n          \"blockNumber\": \"0x1aead92\",\n          \"transactionHash\": \"0xe747cb68590bd99b3f3db2a2e610606b1f3b08161df677fcc0f1451dff445292\",\n          \"transactionIndex\": \"0x4\",\n          \"logIndex\": \"0x8\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x000000000000000000000000404b2bc72675776b85d9ba64c39af4c0ad18304b\",\n            \"0x000000000000000000000000be188d6641e8b680743a4815dfa0f6208038960f\"\n          ],\n          \"data\": \"0x0000000000000000000000000000000000000000000000000000825bd9571e000000000000000000000000000000000000000000000000000569e704a97e85d40000000000000000000000000000000000000000000025853e0b1ed00ddcd7f9000000000000000000000000000000000000000000000000056964a8d02767d40000000000000000000000000000000000000000000025853e0ba12be733f5f9\",\n          \"blockHash\": \"0xce7917e37585ad043a3da7b54488c7e0789dd3c0af184bebb289762819bc0b9d\",\n          \"blockNumber\": \"0x1aead92\",\n          \"transactionHash\": \"0xe747cb68590bd99b3f3db2a2e610606b1f3b08161df677fcc0f1451dff445292\",\n          \"transactionIndex\": \"0x4\",\n          \"logIndex\": \"0x9\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000010000000000000000000000000000800000000000000000000100002000004000000000000000000000000000000008000000000000000080040000000000000000000000000000000000000000000000080000000080000000000000002000200000000000002000100000000000000000000000000000000000000000004000000000020028000001000000000000000000000000000000100040000000000000000000000000000000000000000000800000000000000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0xb2d05e0e\"\n    },\n    {\n      \"transactionHash\": \"0xc5096781de50cfe0d1c5157a2e17dfcf0f5412b609fe364fd8a81022c6c09ffe\",\n      \"transactionIndex\": \"0x5\",\n      \"blockHash\": \"0xce7917e37585ad043a3da7b54488c7e0789dd3c0af184bebb289762819bc0b9d\",\n      \"blockNumber\": \"0x1aead92\",\n      \"from\": \"0x404B2bC72675776B85d9BA64c39af4C0AD18304b\",\n      \"to\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n      \"cumulativeGasUsed\": \"0x365806\",\n      \"gasUsed\": \"0x5aac\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n          \"topics\": [\n            \"0x787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e\",\n            \"0x000000000000000000000000404b2bc72675776b85d9ba64c39af4c0ad18304b\",\n            \"0x000000000000000000000000404b2bc72675776b85d9ba64c39af4c0ad18304b\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0xce7917e37585ad043a3da7b54488c7e0789dd3c0af184bebb289762819bc0b9d\",\n          \"blockNumber\": \"0x1aead92\",\n          \"transactionHash\": \"0xc5096781de50cfe0d1c5157a2e17dfcf0f5412b609fe364fd8a81022c6c09ffe\",\n          \"transactionIndex\": \"0x5\",\n          \"logIndex\": \"0xa\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x000000000000000000000000404b2bc72675776b85d9ba64c39af4c0ad18304b\",\n            \"0x000000000000000000000000be188d6641e8b680743a4815dfa0f6208038960f\"\n          ],\n          \"data\": \"0x00000000000000000000000000000000000000000000000000003f55650b2800000000000000000000000000000000000000000000000000056964a8d01d33060000000000000000000000000000000000000000000025853e0ba12be733f5f9000000000000000000000000000000000000000000000000056925536b120b060000000000000000000000000000000000000000000025853e0be0814c3f1df9\",\n          \"blockHash\": \"0xce7917e37585ad043a3da7b54488c7e0789dd3c0af184bebb289762819bc0b9d\",\n          \"blockNumber\": \"0x1aead92\",\n          \"transactionHash\": \"0xc5096781de50cfe0d1c5157a2e17dfcf0f5412b609fe364fd8a81022c6c09ffe\",\n          \"transactionIndex\": \"0x5\",\n          \"logIndex\": \"0xb\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100002000004000020000000000000000000000000008000000000000002080040000000000000000000000000000000000000000000000080000000080000000000000000000200000000000002000000000000000000000000000000000000000000000004000000000020000000001000000000000000000000000000000100040000000000000000000000000000000000000000000000000000000000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0xb2d05e0e\"\n    },\n    {\n      \"transactionHash\": \"0x5c47c047ee5a1e05c246bcee2ef2fd69a68ce00dd9839a18a48220ca8989ed9f\",\n      \"transactionIndex\": \"0x6\",\n      \"blockHash\": \"0xce7917e37585ad043a3da7b54488c7e0789dd3c0af184bebb289762819bc0b9d\",\n      \"blockNumber\": \"0x1aead92\",\n      \"from\": \"0x404B2bC72675776B85d9BA64c39af4C0AD18304b\",\n      \"to\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n      \"cumulativeGasUsed\": \"0x36b2d8\",\n      \"gasUsed\": \"0x5ad2\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\",\n          \"topics\": [\n            \"0xf7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c\",\n            \"0x000000000000000000000000404b2bc72675776b85d9ba64c39af4c0ad18304b\",\n            \"0x000000000000000000000000404b2bc72675776b85d9ba64c39af4c0ad18304b\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0xce7917e37585ad043a3da7b54488c7e0789dd3c0af184bebb289762819bc0b9d\",\n          \"blockNumber\": \"0x1aead92\",\n          \"transactionHash\": \"0x5c47c047ee5a1e05c246bcee2ef2fd69a68ce00dd9839a18a48220ca8989ed9f\",\n          \"transactionIndex\": \"0x6\",\n          \"logIndex\": \"0xc\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x000000000000000000000000404b2bc72675776b85d9ba64c39af4c0ad18304b\",\n            \"0x000000000000000000000000be188d6641e8b680743a4815dfa0f6208038960f\"\n          ],\n          \"data\": \"0x00000000000000000000000000000000000000000000000000003f6feff91c00000000000000000000000000000000000000000000000000056925536b0d159e0000000000000000000000000000000000000000000025853e0be0814c3f1df90000000000000000000000000000000000000000000000000568e5e37b13f99e0000000000000000000000000000000000000000000025853e0c1ff13c3839f9\",\n          \"blockHash\": \"0xce7917e37585ad043a3da7b54488c7e0789dd3c0af184bebb289762819bc0b9d\",\n          \"blockNumber\": \"0x1aead92\",\n          \"transactionHash\": \"0x5c47c047ee5a1e05c246bcee2ef2fd69a68ce00dd9839a18a48220ca8989ed9f\",\n          \"transactionIndex\": \"0x6\",\n          \"logIndex\": \"0xd\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100002000004000000000000000000000100000000008000000000000000080040000000000000000000000000000000000000000000000080000000080000000000000000000200000000000002000000000000000000000000000000000000000000000004004000000020000800001000000000000000000000000000000100040000000000000000000000000000000000000000000000000000000000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0xb2d05e0e\"\n    }\n  ],\n  \"libraries\": [],\n  \"pending\": [],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/80001/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40\"\n    }\n  },\n  \"timestamp\": 1663792337,\n  \"commit\": \"99d3728\"\n}"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/80001/deployExchange-1663954744.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": \"0x284159990e3c13c5133009aedfaae79a8c50b35b2134093c32b5ba905b187780\",\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2E8DCfE708D44ae2e406a1c02DFE2Fa13012f961\",\n        \"0x7D8610E9567d2a6C9FBf66a5A13E9Ba8bb120d43\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x769bc17a26fd41ce24f934403c8492bdfac6c548\",\n        \"gas\": \"0x40cad7\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b5060405162003b6538038062003b658339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e051610100516101205161014051610160516101805161375e62000407600039600061079e01526000818161043401528181611e9a0152818161206e01528181612a8e0152612b9901526000818161055701528181611e0b0152818161202301528181612abd0152612bc801526000611ac901526000611b1801526000611af301526000611a4c01526000611a7601526000611aa0015261375e6000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80637048027511610182578063d798eff6116100e9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610799578063fa950b48146107c0578063fbddd751146107d3578063fe729aaf146107e657600080fd5b8063e60f0c0514610754578063edef7d8e14610767578063f23a6e611461077a57600080fd5b8063d798eff6146106dd578063d7fb272f146106f0578063d82da83814610713578063e03ac3d014610726578063e2eec4051461072e578063e50e4f971461074157600080fd5b8063a287bdf11161013b578063a287bdf114610654578063a6dfcf8614610667578063ac8a584a1461067a578063b28c51c01461068d578063bc197c811461069e578063c10f1a75146106ca57600080fd5b806370480275146105e257806375d7370a146105f55780637ecebe001461060657806383b8a5ae146106265780639870d7fe1461062e578063a10f3dce1461064157600080fd5b8063429b62e5116102415780635893253c116101fa578063627cdcb9116101d4578063627cdcb914610588578063654f0ce41461059057806368c7450f146105a35780636d70f7ae146105b657600080fd5b80635893253c146105195780635c1548fb146105555780635c975abb1461057b57600080fd5b8063429b62e51461046057806344bea37e146104805780634544f05514610488578063456068d21461049b57806346423aa7146104a35780634a2a11f51461051157600080fd5b80631785f53c116102935780631785f53c1461039b57806324d7806c146103ae5780632dff692d146103db578063346009011461041f5780633b521d78146104325780633d6d35981461045857600080fd5b806301ffc9a7146102db5780630647ee201461030357806306b9d691146103305780631031e36e14610350578063131e7e1c1461035a57806313e7c9d81461036d575b600080fd5b6102ee6102e9366004612bec565b6107f9565b60405190151581526020015b60405180910390f35b6102ee610311366004612c3b565b6001600160a01b03919091166000908152600460205260409020541490565b610338610830565b6040516001600160a01b0390911681526020016102fa565b6103586108a3565b005b600754610338906001600160a01b031681565b61038d61037b366004612c67565b60026020526000908152604090205481565b6040519081526020016102fa565b6103586103a9366004612c67565b6108de565b6102ee6103bc366004612c67565b6001600160a01b03166000908152600160208190526040909120541490565b6104086103e9366004612c84565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016102fa565b61035861042d366004612c84565b610955565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b610358610986565b61038d61046e366004612c67565b60016020526000908152604090205481565b61038d600081565b610358610496366004612c67565b6109f1565b610358610a2b565b6104f46104b1366004612c84565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b6040805182511515815260209283015192810192909252016102fa565b6103e861038d565b610540610527366004612c84565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016102fa565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b6003546102ee9060ff1681565b610358610a64565b61035861059e366004612e84565b610a6e565b6103586105b1366004612eb8565b610a89565b6102ee6105c4366004612c67565b6001600160a01b031660009081526002602052604090205460011490565b6103586105f0366004612c67565b610aca565b6007546001600160a01b0316610338565b61038d610614366004612c67565b60046020526000908152604090205481565b610358610b44565b61035861063c366004612c67565b610bb0565b61038d61064f366004612c84565b610c28565b610338610662366004612c67565b610c46565b610358610675366004612e84565b610c65565b610358610688366004612c67565b610c6e565b6006546001600160a01b0316610338565b6106b16106ac366004612f72565b610ce5565b6040516001600160e01b031990911681526020016102fa565b600654610338906001600160a01b031681565b6103586106eb36600461309e565b610cf7565b61038d6106fe366004612c84565b60009081526005602052604090206001015490565b610358610721366004613101565b610d8f565b610338610db7565b61035861073c366004613123565b610e01565b61038d61074f366004612e84565b610e3d565b61035861076236600461315f565b610eda565b610338610775366004612c67565b610f6c565b6106b16107883660046131f0565b63f23a6e6160e01b95945050505050565b61038d7f000000000000000000000000000000000000000000000000000000000000000081565b6103586107ce366004613258565b610f8b565b6103586107e1366004612c67565b610fc2565b6103586107f436600461328c565b610ffc565b60006001600160e01b03198216630271189760e51b148061082a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546040805163557887a160e11b815290516000926001600160a01b03169163aaf10f429160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e91906132d0565b905090565b33600090815260016020819052604090912054146108d457604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611082565b565b336000908152600160208190526040909120541461090f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610983576040516307ed98ed60e31b815260040160405180910390fd5b50565b336000908152600260205260409020546001146109b657604051631f0853c160e21b815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610a2257604051637bfa4b9f60e01b815260040160405180910390fd5b610983816110bc565b3360009081526001602081905260409091205414610a5c57604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611118565b6108dc600161114f565b6000610a7982610e3d565b9050610a85818361117d565b5050565b3360009081526001602081905260409091205414610aba57604051637bfa4b9f60e01b815260040160405180910390fd5b610ac583838361126b565b505050565b3360009081526001602081905260409091205414610afb57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610b7557604051637bfa4b9f60e01b815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610be157604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610c3382610955565b5060009081526005602052604090205490565b600061082a82610c54610db7565b6007546001600160a01b0316611395565b610983816113f9565b3360009081526001602081905260409091205414610c9f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b63bc197c8160e01b5b95945050505050565b600054600203610d225760405162461bcd60e51b8152600401610d19906132ed565b60405180910390fd5b600260008181553381526020919091526040902054600114610d5757604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610d7b576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336114a1565b50506001600055565b80610d9983610c28565b14610a855760405163337c310560e11b815260040160405180910390fd5b6007546040805163530ca43760e11b815290516000926001600160a01b03169163a619486e9160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b610e2081604001518260200151848461018001518561016001516114fa565b610a8557604051638baa579f60e01b815260040160405180910390fd5b600061082a7fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e6101600151604051602001610ebf9d9c9b9a9998979695949392919061333b565b60405160208183030381529060405280519060200120611558565b600054600203610efc5760405162461bcd60e51b8152600401610d19906132ed565b600260008181553381526020919091526040902054600114610f3157604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610f55576040516313d0ff5960e31b815260040160405180910390fd5b610f61848484846115a6565b505060016000555050565b600061082a82610f7a610830565b6006546001600160a01b0316611747565b805160005b81811015610ac557610fba838281518110610fad57610fad6133cd565b60200260200101516113f9565b600101610f90565b3360009081526001602081905260409091205414610ff357604051637bfa4b9f60e01b815260040160405180910390fd5b61098381611796565b60005460020361101e5760405162461bcd60e51b8152600401610d19906132ed565b60026000818155338152602091909152604090205460011461105357604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615611077576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336117f2565b6003805460ff1916600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b6007546040516001600160a01b038084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6003805460ff1916905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b3360009081526004602052604090205461116a9082906133f9565b3360009081526004602052604090205550565b60008160e001511180156111945750428160e00151105b156111b2576040516362b439dd60e11b815260040160405180910390fd5b6111bc8282610e01565b6103e881610120015111156111e45760405163cd4e616760e01b815260040160405180910390fd5b6111f18160800151610955565b60008281526008602052604090205460ff161561122157604051633d9c5bb760e11b815260040160405180910390fd5b61124e81602001518261010001516001600160a01b03919091166000908152600460205260409020541490565b610a8557604051633ab3447f60e11b815260040160405180910390fd5b8183148061127f575082158061127f575081155b1561129d576040516307ed98ed60e31b815260040160405180910390fd5b6000838152600560205260409020541515806112c6575060008281526005602052604090205415155b156112e457604051630ea075bf60e21b815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b6000806113a184611905565b8051906020012090506000856040516020016113cc91906001600160a01b0391909116815260200190565b6040516020818303038152906040528051906020012090506113ef84838361196b565b9695505050505050565b60208101516001600160a01b03163314611426576040516330cd747160e01b815260040160405180910390fd5b600061143182610e3d565b600081815260086020526040902080549192509060ff161561146657604051633d9c5bb760e11b815260040160405180910390fd5b805460ff1916600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b818110156114f3576114eb8582815181106114c3576114c36133cd565b60200260200101518583815181106114dd576114dd6133cd565b6020026020010151856117f2565b6001016114a6565b5050505050565b60008082600281111561150f5761150f613311565b0361152757611520868686866119aa565b9050610cee565b600282600281111561153b5761153b613311565b0361154c57611520868686866119de565b61152086868686611a18565b600061082a611565611a3f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080806115b58885611b66565b9250925092506000806115c78a611bb6565b915091506115db8a60200151308489611bed565b6115e68a8a89611c17565b6115f08582611c69565b6101208b015190955060009061163290828d6101400151600181111561161857611618613311565b146116235788611625565b875b89898f6101400151611c98565b905061164f308c6020015184848a61164a9190613411565b611bed565b61165b30338484611d88565b60208b810151604080518681529283018590528201899052606082018790526080820183905230916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a46020808c0151604080518681529283018590528201899052606082018890526001600160a01b03169085907f63bf4d16b7fa898ef4c4b2b6d90fd201e9c56313b65638af6088d149d2ce956c9060800160405180910390a3600061172184611de4565b9050801561173957611739308d602001518684611bed565b505050505050505050505050565b6040516bffffffffffffffffffffffff19606085901b16602082015260009061178c908390859060340160405160208183030381529060405280519060200120611ec8565b90505b9392505050565b6006546040516001600160a01b038084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b81600080806118018785611b66565b925092509250600061185e8861012001516000600181111561182557611825613311565b8a6101400151600181111561183c5761183c613311565b146118475786611849565b855b8a60a001518b60c001518c6101400151611c98565b905060008061186c8a611bb6565b91509150611886338b6020015183868a61164a9190613411565b6118968a6020015189848a611bed565b60208a810151604080518581529283018490528201899052606082018790526080820185905233916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a450505050505050505050565b6060604051806101a0016040528061017181526020016135b86101719139604080516001600160a01b03851660208201520160408051601f19818403018152908290526119559291602001613454565b6040516020818303038152906040529050919050565b60008060ff60f81b8584866040516020016119899493929190613483565b60408051808303601f19018152919052805160209091012095945050505050565b6000836001600160a01b0316856001600160a01b03161480156119d357506119d3858484611f1d565b90505b949350505050565b60006119eb858484611f1d565b80156119d35750836001600160a01b0316611a0586610c46565b6001600160a01b03161495945050505050565b6000611a25858484611f1d565b80156119d35750836001600160a01b0316611a0586610f6c565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a9857507f000000000000000000000000000000000000000000000000000000000000000046145b15611ac257507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806000611b788560600151611f45565b611b8185610e3d565b9050611b8d818661117d565b611ba0848660a001518760c00151611f84565b9250611bad818686611fab565b91509250925092565b600080808361014001516001811115611bd157611bd1613311565b03611be157505060800151600091565b50506080015190600090565b81600003611c0557611c00848483612021565b611c11565b611c1184848484612069565b50505050565b815160005b818110156114f357611c6185858381518110611c3a57611c3a6133cd565b6020026020010151858481518110611c5457611c546133cd565b6020026020010151612096565b600101611c1c565b600080611c7583611de4565b90508381101561178f576040516301be9b0160e71b815260040160405180910390fd5b60008515610cee576000611cad85858561217c565b9050600081118015611cc75750670de0b6b3a76400008111155b15611d7e576000836001811115611ce057611ce0613311565b03611d3257611cf1612710826134bc565b86611d0d83611d0881670de0b6b3a7640000613411565b6121eb565b611d17908a6134bc565b611d2191906134bc565b611d2b91906134db565b9150611d7e565b611d46670de0b6b3a76400006127106134bc565b86611d5d83611d0881670de0b6b3a7640000613411565b611d67908a6134bc565b611d7191906134bc565b611d7b91906134db565b91505b5095945050505050565b8015611c1157611d9a84848484611bed565b60408051838152602081018390526001600160a01b038516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b600081600003611e77576040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015611e53573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082a91906134fd565b604051627eeac760e11b8152306004820152602481018390526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90604401611e36565b600080611ed58585612201565b805190602001209050600060ff60f81b868584604051602001611efb9493929190613483565b60408051808303601f1901815291905280516020909101209695505050505050565b6000836001600160a01b0316611f338484612318565b6001600160a01b031614949350505050565b6001600160a01b03811615801590611f6657506001600160a01b0381163314155b1561098357604051635211a07960e01b815260040160405180910390fd5b600082600003611f965750600061178f565b82611fa183866134bc565b61178c91906134db565b60008381526008602052604090206001810154908115611fcb5781611fd1565b8360a001515b915081831115611ff457604051637166356b60e11b815260040160405180910390fd5b611ffe8383613411565b91508160000361201457805460ff191660011781555b6001018190559392505050565b7f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b0385160361205d57611c0081848461233c565b611c1181858585612347565b611c117f000000000000000000000000000000000000000000000000000000000000000085858585612353565b60006120a284846123d9565b90506120af848483612475565b81600080806120be8785611b66565b92509250925060006120e28861012001516000600181111561182557611825613311565b90506000806120f08a611bb6565b9150915061210787878c6020015185858d896124ef565b6020808c01518b8201516040805186815293840185905283018a905260608301889052608083018690526001600160a01b039182169291169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a45050505050505050505050565b60008082600181111561219157612191613311565b036121c957826000036121a55760006121c2565b826121b8670de0b6b3a7640000866134bc565b6121c291906134db565b905061178f565b836000036121d857600061178c565b83611fa1670de0b6b3a7640000856134bc565b60008183106121fa578161178f565b5090919050565b60408051600080825260208201909252606091906122229060448101613516565b60408051601f19818403018152918152602080830180516001600160e01b03166352e831dd60e01b1790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe6020820152600160601b8502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be6041820152600160601b840260608201526e5af43d82803e903d91602b57fd5bf360881b607482015280826040516020016122ff929190613454565b6040516020818303038152906040529250505092915050565b60008060006123278585612556565b915091506123348161259b565b509392505050565b610ac58383836126e5565b611c118484848461275d565b604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b1580156123ba57600080fd5b505af11580156123ce573d6000803e3d6000fd5b505050505050505050565b60008083610140015160018111156123f3576123f3613311565b14801561241657506000826101400151600181111561241457612414613311565b145b156124235750600161082a565b6001836101400151600181111561243c5761243c613311565b14801561245f57506001826101400151600181111561245d5761245d613311565b145b1561246c5750600261082a565b50600092915050565b61247f83836127e0565b61249c57604051633fcd37a360e11b815260040160405180910390fd5b60008160028111156124b0576124b0613311565b036124dd578160800151836080015114610ac55760405163a0b9446560e01b815260040160405180910390fd5b610ac583608001518360800151610d8f565b6124fb8530868a611bed565b612508878786868661282a565b8561251284611de4565b1015612531576040516301be9b0160e71b815260040160405180910390fd5b61254130868561164a858b613411565b61254d30338584611d88565b50505050505050565b600080825160410361258c5760208301516040840151606085015160001a612580878285856128b2565b94509450505050612594565b506000905060025b9250929050565b60008160048111156125af576125af613311565b036125b75750565b60018160048111156125cb576125cb613311565b036126185760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610d19565b600281600481111561262c5761262c613311565b036126795760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610d19565b600381600481111561268d5761268d613311565b036109835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610d19565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611c115760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610d19565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806114f35760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610d19565b60008260c00151600014806127f7575060c0820151155b156128045750600161082a565b61178f61281084612976565b61281984612976565b856101400151856101400151612990565b600081600281111561283e5761283e613311565b146114f357600181600281111561285757612857613311565b0361287d576000828152600560205260409020600101546128789085612a2a565b6114f3565b600281600281111561289157612891613311565b036114f3576000838152600560205260409020600101546128789086612b35565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128e9575060009050600361296d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561293d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129665760006001925092505061296d565b9150600090505b94509492505050565b600061082a8260a001518360c0015184610140015161217c565b6000808360018111156129a5576129a5613311565b036129e95760008260018111156129be576129be613311565b036129df57670de0b6b3a76400006129d685876133f9565b101590506119d6565b50828410156119d6565b60008260018111156129fd576129fd613311565b03612a0c5750838310156119d6565b670de0b6b3a7640000612a1f85876133f9565b111595945050505050565b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612a6057612a606133cd565b602002602001018181525050600281600181518110612a8157612a816133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160e01b031960e084901b168152612b079190600090889087908990600401613549565b600060405180830381600087803b158015612b2157600080fd5b505af115801561254d573d6000803e3d6000fd5b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612b6b57612b6b6133cd565b602002602001018181525050600281600181518110612b8c57612b8c6133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e7212ad7f0000000000000000000000000000000000000000000000000000000000000000612add565b600060208284031215612bfe57600080fd5b81356001600160e01b03198116811461178f57600080fd5b6001600160a01b038116811461098357600080fd5b8035612c3681612c16565b919050565b60008060408385031215612c4e57600080fd5b8235612c5981612c16565b946020939093013593505050565b600060208284031215612c7957600080fd5b813561178f81612c16565b600060208284031215612c9657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b0381118282101715612cd657612cd6612c9d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612d0457612d04612c9d565b604052919050565b803560028110612c3657600080fd5b803560038110612c3657600080fd5b600082601f830112612d3b57600080fd5b81356001600160401b03811115612d5457612d54612c9d565b612d67601f8201601f1916602001612cdc565b818152846020838601011115612d7c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a08284031215612dac57600080fd5b612db4612cb3565b905081358152612dc660208301612c2b565b6020820152612dd760408301612c2b565b6040820152612de860608301612c2b565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140612e3b818401612d0c565b90820152610160612e4d838201612d1b565b90820152610180828101356001600160401b03811115612e6c57600080fd5b612e7885828601612d2a565b82840152505092915050565b600060208284031215612e9657600080fd5b81356001600160401b03811115612eac57600080fd5b6119d684828501612d99565b600080600060608486031215612ecd57600080fd5b505081359360208301359350604090920135919050565b60006001600160401b03821115612efd57612efd612c9d565b5060051b60200190565b600082601f830112612f1857600080fd5b81356020612f2d612f2883612ee4565b612cdc565b82815260059290921b84018101918181019086841115612f4c57600080fd5b8286015b84811015612f675780358352918301918301612f50565b509695505050505050565b600080600080600060a08688031215612f8a57600080fd5b8535612f9581612c16565b94506020860135612fa581612c16565b935060408601356001600160401b0380821115612fc157600080fd5b612fcd89838a01612f07565b94506060880135915080821115612fe357600080fd5b612fef89838a01612f07565b9350608088013591508082111561300557600080fd5b5061301288828901612d2a565b9150509295509295909350565b600082601f83011261303057600080fd5b81356020613040612f2883612ee4565b82815260059290921b8401810191818101908684111561305f57600080fd5b8286015b84811015612f675780356001600160401b038111156130825760008081fd5b6130908986838b0101612d99565b845250918301918301613063565b600080604083850312156130b157600080fd5b82356001600160401b03808211156130c857600080fd5b6130d48683870161301f565b935060208501359150808211156130ea57600080fd5b506130f785828601612f07565b9150509250929050565b6000806040838503121561311457600080fd5b50508035926020909101359150565b6000806040838503121561313657600080fd5b8235915060208301356001600160401b0381111561315357600080fd5b6130f785828601612d99565b6000806000806080858703121561317557600080fd5b84356001600160401b038082111561318c57600080fd5b61319888838901612d99565b955060208701359150808211156131ae57600080fd5b6131ba8883890161301f565b94506040870135935060608701359150808211156131d757600080fd5b506131e487828801612f07565b91505092959194509250565b600080600080600060a0868803121561320857600080fd5b853561321381612c16565b9450602086013561322381612c16565b9350604086013592506060860135915060808601356001600160401b0381111561324c57600080fd5b61301288828901612d2a565b60006020828403121561326a57600080fd5b81356001600160401b0381111561328057600080fd5b6119d68482850161301f565b6000806040838503121561329f57600080fd5b82356001600160401b038111156132b557600080fd5b6132c185828601612d99565b95602094909401359450505050565b6000602082840312156132e257600080fd5b815161178f81612c16565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b6003811061333757613337613311565b9052565b8d8152602081018d90526001600160a01b038c811660408301528b811660608301528a16608082015260a0810189905260c0810188905260e081018790526101008101869052610120810185905261014081018490526101a08101600284106133a6576133a6613311565b836101608301526133bb610180830184613327565b9e9d5050505050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561340c5761340c6133e3565b500190565b600082821015613423576134236133e3565b500390565b60005b8381101561344357818101518382015260200161342b565b83811115611c115750506000910152565b60008351613466818460208801613428565b83519083019061347a818360208801613428565b01949350505050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60008160001904831182151516156134d6576134d66133e3565b500290565b6000826134f857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561350f57600080fd5b5051919050565b6020815260008251806020840152613535816040850160208701613428565b601f01601f19169190910160400192915050565b6001600160a01b038616815260208082018690526040820185905260a06060830181905284519083018190526000918581019160c0850190845b8181101561359f57845183529383019391830191600101613583565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a2646970667358221220d93139e32bae530b273044d07d00326d19debeb5b49b08f172b04a7bc677797964736f6c634300080f00330000000000000000000000002e8dcfe708d44ae2e406a1c02dfe2fa13012f9610000000000000000000000007d8610e9567d2a6c9fbf66a5a13e9ba8bb120d43000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0xf1133522574a9acd7b25cf90f070a1a1ad9805dfee1924b2f9cf140f19ebb888\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x769bc17a26fd41ce24f934403c8492bdfac6c548\",\n        \"to\": \"0xbe9f464bc8673dc26ae4f8ed91156c75677762db\",\n        \"gas\": \"0x1107e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x8bce3d412b37bd7c1499d7eb5cf1f6f7f9c150272b8b0cb29aaeebe9e2ac5ae3\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x769bc17a26fd41ce24f934403c8492bdfac6c548\",\n        \"to\": \"0xbe9f464bc8673dc26ae4f8ed91156c75677762db\",\n        \"gas\": \"0x110f1\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x14e545af6c5eda791bbe40b810fab40edcb9fb891f809425d845d5282f429002\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x769bc17a26fd41ce24f934403c8492bdfac6c548\",\n        \"to\": \"0xbe9f464bc8673dc26ae4f8ed91156c75677762db\",\n        \"gas\": \"0x7d3c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0xa189ba785b05fe6e6a0ac4b543f8f4dd5ae7090adae8a6ba2697817b36bbbe38\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x769bc17a26fd41ce24f934403c8492bdfac6c548\",\n        \"to\": \"0xbe9f464bc8673dc26ae4f8ed91156c75677762db\",\n        \"gas\": \"0x84d2\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [],\n  \"libraries\": [],\n  \"pending\": [\n    \"0x284159990e3c13c5133009aedfaae79a8c50b35b2134093c32b5ba905b187780\",\n    \"0xf1133522574a9acd7b25cf90f070a1a1ad9805dfee1924b2f9cf140f19ebb888\",\n    \"0x8bce3d412b37bd7c1499d7eb5cf1f6f7f9c150272b8b0cb29aaeebe9e2ac5ae3\",\n    \"0x14e545af6c5eda791bbe40b810fab40edcb9fb891f809425d845d5282f429002\",\n    \"0xa189ba785b05fe6e6a0ac4b543f8f4dd5ae7090adae8a6ba2697817b36bbbe38\"\n  ],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/80001/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\"\n    }\n  },\n  \"timestamp\": 1663954744,\n  \"commit\": \"ec7c23f\"\n}"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/80001/deployExchange-1663954757.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": \"0x284159990e3c13c5133009aedfaae79a8c50b35b2134093c32b5ba905b187780\",\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2E8DCfE708D44ae2e406a1c02DFE2Fa13012f961\",\n        \"0x7D8610E9567d2a6C9FBf66a5A13E9Ba8bb120d43\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x769bc17a26fd41ce24f934403c8492bdfac6c548\",\n        \"gas\": \"0x40cad7\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b5060405162003b6538038062003b658339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e051610100516101205161014051610160516101805161375e62000407600039600061079e01526000818161043401528181611e9a0152818161206e01528181612a8e0152612b9901526000818161055701528181611e0b0152818161202301528181612abd0152612bc801526000611ac901526000611b1801526000611af301526000611a4c01526000611a7601526000611aa0015261375e6000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80637048027511610182578063d798eff6116100e9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610799578063fa950b48146107c0578063fbddd751146107d3578063fe729aaf146107e657600080fd5b8063e60f0c0514610754578063edef7d8e14610767578063f23a6e611461077a57600080fd5b8063d798eff6146106dd578063d7fb272f146106f0578063d82da83814610713578063e03ac3d014610726578063e2eec4051461072e578063e50e4f971461074157600080fd5b8063a287bdf11161013b578063a287bdf114610654578063a6dfcf8614610667578063ac8a584a1461067a578063b28c51c01461068d578063bc197c811461069e578063c10f1a75146106ca57600080fd5b806370480275146105e257806375d7370a146105f55780637ecebe001461060657806383b8a5ae146106265780639870d7fe1461062e578063a10f3dce1461064157600080fd5b8063429b62e5116102415780635893253c116101fa578063627cdcb9116101d4578063627cdcb914610588578063654f0ce41461059057806368c7450f146105a35780636d70f7ae146105b657600080fd5b80635893253c146105195780635c1548fb146105555780635c975abb1461057b57600080fd5b8063429b62e51461046057806344bea37e146104805780634544f05514610488578063456068d21461049b57806346423aa7146104a35780634a2a11f51461051157600080fd5b80631785f53c116102935780631785f53c1461039b57806324d7806c146103ae5780632dff692d146103db578063346009011461041f5780633b521d78146104325780633d6d35981461045857600080fd5b806301ffc9a7146102db5780630647ee201461030357806306b9d691146103305780631031e36e14610350578063131e7e1c1461035a57806313e7c9d81461036d575b600080fd5b6102ee6102e9366004612bec565b6107f9565b60405190151581526020015b60405180910390f35b6102ee610311366004612c3b565b6001600160a01b03919091166000908152600460205260409020541490565b610338610830565b6040516001600160a01b0390911681526020016102fa565b6103586108a3565b005b600754610338906001600160a01b031681565b61038d61037b366004612c67565b60026020526000908152604090205481565b6040519081526020016102fa565b6103586103a9366004612c67565b6108de565b6102ee6103bc366004612c67565b6001600160a01b03166000908152600160208190526040909120541490565b6104086103e9366004612c84565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016102fa565b61035861042d366004612c84565b610955565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b610358610986565b61038d61046e366004612c67565b60016020526000908152604090205481565b61038d600081565b610358610496366004612c67565b6109f1565b610358610a2b565b6104f46104b1366004612c84565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b6040805182511515815260209283015192810192909252016102fa565b6103e861038d565b610540610527366004612c84565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016102fa565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b6003546102ee9060ff1681565b610358610a64565b61035861059e366004612e84565b610a6e565b6103586105b1366004612eb8565b610a89565b6102ee6105c4366004612c67565b6001600160a01b031660009081526002602052604090205460011490565b6103586105f0366004612c67565b610aca565b6007546001600160a01b0316610338565b61038d610614366004612c67565b60046020526000908152604090205481565b610358610b44565b61035861063c366004612c67565b610bb0565b61038d61064f366004612c84565b610c28565b610338610662366004612c67565b610c46565b610358610675366004612e84565b610c65565b610358610688366004612c67565b610c6e565b6006546001600160a01b0316610338565b6106b16106ac366004612f72565b610ce5565b6040516001600160e01b031990911681526020016102fa565b600654610338906001600160a01b031681565b6103586106eb36600461309e565b610cf7565b61038d6106fe366004612c84565b60009081526005602052604090206001015490565b610358610721366004613101565b610d8f565b610338610db7565b61035861073c366004613123565b610e01565b61038d61074f366004612e84565b610e3d565b61035861076236600461315f565b610eda565b610338610775366004612c67565b610f6c565b6106b16107883660046131f0565b63f23a6e6160e01b95945050505050565b61038d7f000000000000000000000000000000000000000000000000000000000000000081565b6103586107ce366004613258565b610f8b565b6103586107e1366004612c67565b610fc2565b6103586107f436600461328c565b610ffc565b60006001600160e01b03198216630271189760e51b148061082a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546040805163557887a160e11b815290516000926001600160a01b03169163aaf10f429160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e91906132d0565b905090565b33600090815260016020819052604090912054146108d457604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611082565b565b336000908152600160208190526040909120541461090f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610983576040516307ed98ed60e31b815260040160405180910390fd5b50565b336000908152600260205260409020546001146109b657604051631f0853c160e21b815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610a2257604051637bfa4b9f60e01b815260040160405180910390fd5b610983816110bc565b3360009081526001602081905260409091205414610a5c57604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611118565b6108dc600161114f565b6000610a7982610e3d565b9050610a85818361117d565b5050565b3360009081526001602081905260409091205414610aba57604051637bfa4b9f60e01b815260040160405180910390fd5b610ac583838361126b565b505050565b3360009081526001602081905260409091205414610afb57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610b7557604051637bfa4b9f60e01b815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610be157604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610c3382610955565b5060009081526005602052604090205490565b600061082a82610c54610db7565b6007546001600160a01b0316611395565b610983816113f9565b3360009081526001602081905260409091205414610c9f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b63bc197c8160e01b5b95945050505050565b600054600203610d225760405162461bcd60e51b8152600401610d19906132ed565b60405180910390fd5b600260008181553381526020919091526040902054600114610d5757604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610d7b576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336114a1565b50506001600055565b80610d9983610c28565b14610a855760405163337c310560e11b815260040160405180910390fd5b6007546040805163530ca43760e11b815290516000926001600160a01b03169163a619486e9160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b610e2081604001518260200151848461018001518561016001516114fa565b610a8557604051638baa579f60e01b815260040160405180910390fd5b600061082a7fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e6101600151604051602001610ebf9d9c9b9a9998979695949392919061333b565b60405160208183030381529060405280519060200120611558565b600054600203610efc5760405162461bcd60e51b8152600401610d19906132ed565b600260008181553381526020919091526040902054600114610f3157604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610f55576040516313d0ff5960e31b815260040160405180910390fd5b610f61848484846115a6565b505060016000555050565b600061082a82610f7a610830565b6006546001600160a01b0316611747565b805160005b81811015610ac557610fba838281518110610fad57610fad6133cd565b60200260200101516113f9565b600101610f90565b3360009081526001602081905260409091205414610ff357604051637bfa4b9f60e01b815260040160405180910390fd5b61098381611796565b60005460020361101e5760405162461bcd60e51b8152600401610d19906132ed565b60026000818155338152602091909152604090205460011461105357604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615611077576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336117f2565b6003805460ff1916600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b6007546040516001600160a01b038084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6003805460ff1916905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b3360009081526004602052604090205461116a9082906133f9565b3360009081526004602052604090205550565b60008160e001511180156111945750428160e00151105b156111b2576040516362b439dd60e11b815260040160405180910390fd5b6111bc8282610e01565b6103e881610120015111156111e45760405163cd4e616760e01b815260040160405180910390fd5b6111f18160800151610955565b60008281526008602052604090205460ff161561122157604051633d9c5bb760e11b815260040160405180910390fd5b61124e81602001518261010001516001600160a01b03919091166000908152600460205260409020541490565b610a8557604051633ab3447f60e11b815260040160405180910390fd5b8183148061127f575082158061127f575081155b1561129d576040516307ed98ed60e31b815260040160405180910390fd5b6000838152600560205260409020541515806112c6575060008281526005602052604090205415155b156112e457604051630ea075bf60e21b815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b6000806113a184611905565b8051906020012090506000856040516020016113cc91906001600160a01b0391909116815260200190565b6040516020818303038152906040528051906020012090506113ef84838361196b565b9695505050505050565b60208101516001600160a01b03163314611426576040516330cd747160e01b815260040160405180910390fd5b600061143182610e3d565b600081815260086020526040902080549192509060ff161561146657604051633d9c5bb760e11b815260040160405180910390fd5b805460ff1916600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b818110156114f3576114eb8582815181106114c3576114c36133cd565b60200260200101518583815181106114dd576114dd6133cd565b6020026020010151856117f2565b6001016114a6565b5050505050565b60008082600281111561150f5761150f613311565b0361152757611520868686866119aa565b9050610cee565b600282600281111561153b5761153b613311565b0361154c57611520868686866119de565b61152086868686611a18565b600061082a611565611a3f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080806115b58885611b66565b9250925092506000806115c78a611bb6565b915091506115db8a60200151308489611bed565b6115e68a8a89611c17565b6115f08582611c69565b6101208b015190955060009061163290828d6101400151600181111561161857611618613311565b146116235788611625565b875b89898f6101400151611c98565b905061164f308c6020015184848a61164a9190613411565b611bed565b61165b30338484611d88565b60208b810151604080518681529283018590528201899052606082018790526080820183905230916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a46020808c0151604080518681529283018590528201899052606082018890526001600160a01b03169085907f63bf4d16b7fa898ef4c4b2b6d90fd201e9c56313b65638af6088d149d2ce956c9060800160405180910390a3600061172184611de4565b9050801561173957611739308d602001518684611bed565b505050505050505050505050565b6040516bffffffffffffffffffffffff19606085901b16602082015260009061178c908390859060340160405160208183030381529060405280519060200120611ec8565b90505b9392505050565b6006546040516001600160a01b038084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b81600080806118018785611b66565b925092509250600061185e8861012001516000600181111561182557611825613311565b8a6101400151600181111561183c5761183c613311565b146118475786611849565b855b8a60a001518b60c001518c6101400151611c98565b905060008061186c8a611bb6565b91509150611886338b6020015183868a61164a9190613411565b6118968a6020015189848a611bed565b60208a810151604080518581529283018490528201899052606082018790526080820185905233916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a450505050505050505050565b6060604051806101a0016040528061017181526020016135b86101719139604080516001600160a01b03851660208201520160408051601f19818403018152908290526119559291602001613454565b6040516020818303038152906040529050919050565b60008060ff60f81b8584866040516020016119899493929190613483565b60408051808303601f19018152919052805160209091012095945050505050565b6000836001600160a01b0316856001600160a01b03161480156119d357506119d3858484611f1d565b90505b949350505050565b60006119eb858484611f1d565b80156119d35750836001600160a01b0316611a0586610c46565b6001600160a01b03161495945050505050565b6000611a25858484611f1d565b80156119d35750836001600160a01b0316611a0586610f6c565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a9857507f000000000000000000000000000000000000000000000000000000000000000046145b15611ac257507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806000611b788560600151611f45565b611b8185610e3d565b9050611b8d818661117d565b611ba0848660a001518760c00151611f84565b9250611bad818686611fab565b91509250925092565b600080808361014001516001811115611bd157611bd1613311565b03611be157505060800151600091565b50506080015190600090565b81600003611c0557611c00848483612021565b611c11565b611c1184848484612069565b50505050565b815160005b818110156114f357611c6185858381518110611c3a57611c3a6133cd565b6020026020010151858481518110611c5457611c546133cd565b6020026020010151612096565b600101611c1c565b600080611c7583611de4565b90508381101561178f576040516301be9b0160e71b815260040160405180910390fd5b60008515610cee576000611cad85858561217c565b9050600081118015611cc75750670de0b6b3a76400008111155b15611d7e576000836001811115611ce057611ce0613311565b03611d3257611cf1612710826134bc565b86611d0d83611d0881670de0b6b3a7640000613411565b6121eb565b611d17908a6134bc565b611d2191906134bc565b611d2b91906134db565b9150611d7e565b611d46670de0b6b3a76400006127106134bc565b86611d5d83611d0881670de0b6b3a7640000613411565b611d67908a6134bc565b611d7191906134bc565b611d7b91906134db565b91505b5095945050505050565b8015611c1157611d9a84848484611bed565b60408051838152602081018390526001600160a01b038516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b600081600003611e77576040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015611e53573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082a91906134fd565b604051627eeac760e11b8152306004820152602481018390526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90604401611e36565b600080611ed58585612201565b805190602001209050600060ff60f81b868584604051602001611efb9493929190613483565b60408051808303601f1901815291905280516020909101209695505050505050565b6000836001600160a01b0316611f338484612318565b6001600160a01b031614949350505050565b6001600160a01b03811615801590611f6657506001600160a01b0381163314155b1561098357604051635211a07960e01b815260040160405180910390fd5b600082600003611f965750600061178f565b82611fa183866134bc565b61178c91906134db565b60008381526008602052604090206001810154908115611fcb5781611fd1565b8360a001515b915081831115611ff457604051637166356b60e11b815260040160405180910390fd5b611ffe8383613411565b91508160000361201457805460ff191660011781555b6001018190559392505050565b7f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b0385160361205d57611c0081848461233c565b611c1181858585612347565b611c117f000000000000000000000000000000000000000000000000000000000000000085858585612353565b60006120a284846123d9565b90506120af848483612475565b81600080806120be8785611b66565b92509250925060006120e28861012001516000600181111561182557611825613311565b90506000806120f08a611bb6565b9150915061210787878c6020015185858d896124ef565b6020808c01518b8201516040805186815293840185905283018a905260608301889052608083018690526001600160a01b039182169291169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a45050505050505050505050565b60008082600181111561219157612191613311565b036121c957826000036121a55760006121c2565b826121b8670de0b6b3a7640000866134bc565b6121c291906134db565b905061178f565b836000036121d857600061178c565b83611fa1670de0b6b3a7640000856134bc565b60008183106121fa578161178f565b5090919050565b60408051600080825260208201909252606091906122229060448101613516565b60408051601f19818403018152918152602080830180516001600160e01b03166352e831dd60e01b1790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe6020820152600160601b8502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be6041820152600160601b840260608201526e5af43d82803e903d91602b57fd5bf360881b607482015280826040516020016122ff929190613454565b6040516020818303038152906040529250505092915050565b60008060006123278585612556565b915091506123348161259b565b509392505050565b610ac58383836126e5565b611c118484848461275d565b604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b1580156123ba57600080fd5b505af11580156123ce573d6000803e3d6000fd5b505050505050505050565b60008083610140015160018111156123f3576123f3613311565b14801561241657506000826101400151600181111561241457612414613311565b145b156124235750600161082a565b6001836101400151600181111561243c5761243c613311565b14801561245f57506001826101400151600181111561245d5761245d613311565b145b1561246c5750600261082a565b50600092915050565b61247f83836127e0565b61249c57604051633fcd37a360e11b815260040160405180910390fd5b60008160028111156124b0576124b0613311565b036124dd578160800151836080015114610ac55760405163a0b9446560e01b815260040160405180910390fd5b610ac583608001518360800151610d8f565b6124fb8530868a611bed565b612508878786868661282a565b8561251284611de4565b1015612531576040516301be9b0160e71b815260040160405180910390fd5b61254130868561164a858b613411565b61254d30338584611d88565b50505050505050565b600080825160410361258c5760208301516040840151606085015160001a612580878285856128b2565b94509450505050612594565b506000905060025b9250929050565b60008160048111156125af576125af613311565b036125b75750565b60018160048111156125cb576125cb613311565b036126185760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610d19565b600281600481111561262c5761262c613311565b036126795760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610d19565b600381600481111561268d5761268d613311565b036109835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610d19565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611c115760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610d19565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806114f35760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610d19565b60008260c00151600014806127f7575060c0820151155b156128045750600161082a565b61178f61281084612976565b61281984612976565b856101400151856101400151612990565b600081600281111561283e5761283e613311565b146114f357600181600281111561285757612857613311565b0361287d576000828152600560205260409020600101546128789085612a2a565b6114f3565b600281600281111561289157612891613311565b036114f3576000838152600560205260409020600101546128789086612b35565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128e9575060009050600361296d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561293d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129665760006001925092505061296d565b9150600090505b94509492505050565b600061082a8260a001518360c0015184610140015161217c565b6000808360018111156129a5576129a5613311565b036129e95760008260018111156129be576129be613311565b036129df57670de0b6b3a76400006129d685876133f9565b101590506119d6565b50828410156119d6565b60008260018111156129fd576129fd613311565b03612a0c5750838310156119d6565b670de0b6b3a7640000612a1f85876133f9565b111595945050505050565b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612a6057612a606133cd565b602002602001018181525050600281600181518110612a8157612a816133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160e01b031960e084901b168152612b079190600090889087908990600401613549565b600060405180830381600087803b158015612b2157600080fd5b505af115801561254d573d6000803e3d6000fd5b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612b6b57612b6b6133cd565b602002602001018181525050600281600181518110612b8c57612b8c6133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e7212ad7f0000000000000000000000000000000000000000000000000000000000000000612add565b600060208284031215612bfe57600080fd5b81356001600160e01b03198116811461178f57600080fd5b6001600160a01b038116811461098357600080fd5b8035612c3681612c16565b919050565b60008060408385031215612c4e57600080fd5b8235612c5981612c16565b946020939093013593505050565b600060208284031215612c7957600080fd5b813561178f81612c16565b600060208284031215612c9657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b0381118282101715612cd657612cd6612c9d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612d0457612d04612c9d565b604052919050565b803560028110612c3657600080fd5b803560038110612c3657600080fd5b600082601f830112612d3b57600080fd5b81356001600160401b03811115612d5457612d54612c9d565b612d67601f8201601f1916602001612cdc565b818152846020838601011115612d7c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a08284031215612dac57600080fd5b612db4612cb3565b905081358152612dc660208301612c2b565b6020820152612dd760408301612c2b565b6040820152612de860608301612c2b565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140612e3b818401612d0c565b90820152610160612e4d838201612d1b565b90820152610180828101356001600160401b03811115612e6c57600080fd5b612e7885828601612d2a565b82840152505092915050565b600060208284031215612e9657600080fd5b81356001600160401b03811115612eac57600080fd5b6119d684828501612d99565b600080600060608486031215612ecd57600080fd5b505081359360208301359350604090920135919050565b60006001600160401b03821115612efd57612efd612c9d565b5060051b60200190565b600082601f830112612f1857600080fd5b81356020612f2d612f2883612ee4565b612cdc565b82815260059290921b84018101918181019086841115612f4c57600080fd5b8286015b84811015612f675780358352918301918301612f50565b509695505050505050565b600080600080600060a08688031215612f8a57600080fd5b8535612f9581612c16565b94506020860135612fa581612c16565b935060408601356001600160401b0380821115612fc157600080fd5b612fcd89838a01612f07565b94506060880135915080821115612fe357600080fd5b612fef89838a01612f07565b9350608088013591508082111561300557600080fd5b5061301288828901612d2a565b9150509295509295909350565b600082601f83011261303057600080fd5b81356020613040612f2883612ee4565b82815260059290921b8401810191818101908684111561305f57600080fd5b8286015b84811015612f675780356001600160401b038111156130825760008081fd5b6130908986838b0101612d99565b845250918301918301613063565b600080604083850312156130b157600080fd5b82356001600160401b03808211156130c857600080fd5b6130d48683870161301f565b935060208501359150808211156130ea57600080fd5b506130f785828601612f07565b9150509250929050565b6000806040838503121561311457600080fd5b50508035926020909101359150565b6000806040838503121561313657600080fd5b8235915060208301356001600160401b0381111561315357600080fd5b6130f785828601612d99565b6000806000806080858703121561317557600080fd5b84356001600160401b038082111561318c57600080fd5b61319888838901612d99565b955060208701359150808211156131ae57600080fd5b6131ba8883890161301f565b94506040870135935060608701359150808211156131d757600080fd5b506131e487828801612f07565b91505092959194509250565b600080600080600060a0868803121561320857600080fd5b853561321381612c16565b9450602086013561322381612c16565b9350604086013592506060860135915060808601356001600160401b0381111561324c57600080fd5b61301288828901612d2a565b60006020828403121561326a57600080fd5b81356001600160401b0381111561328057600080fd5b6119d68482850161301f565b6000806040838503121561329f57600080fd5b82356001600160401b038111156132b557600080fd5b6132c185828601612d99565b95602094909401359450505050565b6000602082840312156132e257600080fd5b815161178f81612c16565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b6003811061333757613337613311565b9052565b8d8152602081018d90526001600160a01b038c811660408301528b811660608301528a16608082015260a0810189905260c0810188905260e081018790526101008101869052610120810185905261014081018490526101a08101600284106133a6576133a6613311565b836101608301526133bb610180830184613327565b9e9d5050505050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561340c5761340c6133e3565b500190565b600082821015613423576134236133e3565b500390565b60005b8381101561344357818101518382015260200161342b565b83811115611c115750506000910152565b60008351613466818460208801613428565b83519083019061347a818360208801613428565b01949350505050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60008160001904831182151516156134d6576134d66133e3565b500290565b6000826134f857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561350f57600080fd5b5051919050565b6020815260008251806020840152613535816040850160208701613428565b601f01601f19169190910160400192915050565b6001600160a01b038616815260208082018690526040820185905260a06060830181905284519083018190526000918581019160c0850190845b8181101561359f57845183529383019391830191600101613583565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a2646970667358221220d93139e32bae530b273044d07d00326d19debeb5b49b08f172b04a7bc677797964736f6c634300080f00330000000000000000000000002e8dcfe708d44ae2e406a1c02dfe2fa13012f9610000000000000000000000007d8610e9567d2a6c9fbf66a5a13e9ba8bb120d43000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0xf1133522574a9acd7b25cf90f070a1a1ad9805dfee1924b2f9cf140f19ebb888\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x769bc17a26fd41ce24f934403c8492bdfac6c548\",\n        \"to\": \"0xbe9f464bc8673dc26ae4f8ed91156c75677762db\",\n        \"gas\": \"0x1107e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x8bce3d412b37bd7c1499d7eb5cf1f6f7f9c150272b8b0cb29aaeebe9e2ac5ae3\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x769bc17a26fd41ce24f934403c8492bdfac6c548\",\n        \"to\": \"0xbe9f464bc8673dc26ae4f8ed91156c75677762db\",\n        \"gas\": \"0x110f1\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x14e545af6c5eda791bbe40b810fab40edcb9fb891f809425d845d5282f429002\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x769bc17a26fd41ce24f934403c8492bdfac6c548\",\n        \"to\": \"0xbe9f464bc8673dc26ae4f8ed91156c75677762db\",\n        \"gas\": \"0x7d3c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0xa189ba785b05fe6e6a0ac4b543f8f4dd5ae7090adae8a6ba2697817b36bbbe38\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x769bc17a26fd41ce24f934403c8492bdfac6c548\",\n        \"to\": \"0xbe9f464bc8673dc26ae4f8ed91156c75677762db\",\n        \"gas\": \"0x84d2\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [\n    {\n      \"transactionHash\": \"0x284159990e3c13c5133009aedfaae79a8c50b35b2134093c32b5ba905b187780\",\n      \"transactionIndex\": \"0x1\",\n      \"blockHash\": \"0x20a1ebf99c45724a09b89d7b7a88097ab95f988da9ed60d1125d60aa802b7899\",\n      \"blockNumber\": \"0x1af2c10\",\n      \"from\": \"0x769bC17a26FD41cE24F934403c8492bDfAC6C548\",\n      \"to\": null,\n      \"cumulativeGasUsed\": \"0x32c1b1\",\n      \"gasUsed\": \"0x31d71c\",\n      \"contractAddress\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"logs\": [\n        {\n          \"address\": \"0x2E8DCfE708D44ae2e406a1c02DFE2Fa13012f961\",\n          \"topics\": [\n            \"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\",\n            \"0x000000000000000000000000be9f464bc8673dc26ae4f8ed91156c75677762db\",\n            \"0x0000000000000000000000007d8610e9567d2a6c9fbf66a5a13e9ba8bb120d43\"\n          ],\n          \"data\": \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\",\n          \"blockHash\": \"0x20a1ebf99c45724a09b89d7b7a88097ab95f988da9ed60d1125d60aa802b7899\",\n          \"blockNumber\": \"0x1af2c10\",\n          \"transactionHash\": \"0x284159990e3c13c5133009aedfaae79a8c50b35b2134093c32b5ba905b187780\",\n          \"transactionIndex\": \"0x1\",\n          \"logIndex\": \"0x2\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x000000000000000000000000769bc17a26fd41ce24f934403c8492bdfac6c548\",\n            \"0x000000000000000000000000be188d6641e8b680743a4815dfa0f6208038960f\"\n          ],\n          \"data\": \"0x0000000000000000000000000000000000000000000000000022d0228bbc4800000000000000000000000000000000000000000000000000058d15e176280000000000000000000000000000000000000000000000002593ec000bb80767a15f000000000000000000000000000000000000000000000000056a45beea6bb800000000000000000000000000000000000000000000002593ec22dbda9323e95f\",\n          \"blockHash\": \"0x20a1ebf99c45724a09b89d7b7a88097ab95f988da9ed60d1125d60aa802b7899\",\n          \"blockNumber\": \"0x1af2c10\",\n          \"transactionHash\": \"0x284159990e3c13c5133009aedfaae79a8c50b35b2134093c32b5ba905b187780\",\n          \"transactionIndex\": \"0x1\",\n          \"logIndex\": \"0x3\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00008000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000080008000000000000000000000200000000000000000000000040000000000800010000000000000000100000000004000000000000020000000000000000000000000000000000080000000000000000020000000000000000000000000000000000000000080000000000000000000320000000000000000000000080000000000000000000000000000000000004000000000000000000001000400000000000000000000000400100040000000000010000000000000000000000000000000000000000000001000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0xb2d05e0e\"\n    },\n    {\n      \"transactionHash\": \"0xf1133522574a9acd7b25cf90f070a1a1ad9805dfee1924b2f9cf140f19ebb888\",\n      \"transactionIndex\": \"0x2\",\n      \"blockHash\": \"0x20a1ebf99c45724a09b89d7b7a88097ab95f988da9ed60d1125d60aa802b7899\",\n      \"blockNumber\": \"0x1af2c10\",\n      \"from\": \"0x769bC17a26FD41cE24F934403c8492bDfAC6C548\",\n      \"to\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"cumulativeGasUsed\": \"0x337c03\",\n      \"gasUsed\": \"0xba52\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n          \"topics\": [\n            \"0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc\",\n            \"0x000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n            \"0x000000000000000000000000769bc17a26fd41ce24f934403c8492bdfac6c548\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x20a1ebf99c45724a09b89d7b7a88097ab95f988da9ed60d1125d60aa802b7899\",\n          \"blockNumber\": \"0x1af2c10\",\n          \"transactionHash\": \"0xf1133522574a9acd7b25cf90f070a1a1ad9805dfee1924b2f9cf140f19ebb888\",\n          \"transactionIndex\": \"0x2\",\n          \"logIndex\": \"0x4\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x000000000000000000000000769bc17a26fd41ce24f934403c8492bdfac6c548\",\n            \"0x000000000000000000000000be188d6641e8b680743a4815dfa0f6208038960f\"\n          ],\n          \"data\": \"0x00000000000000000000000000000000000000000000000000008224ab0a1c00000000000000000000000000000000000000000000000000056a45bee7b1f478000000000000000000000000000000000000000000002593ec22dbda9323e95f0000000000000000000000000000000000000000000000000569c39a3ca7d878000000000000000000000000000000000000000000002593ec235dff3e2e055f\",\n          \"blockHash\": \"0x20a1ebf99c45724a09b89d7b7a88097ab95f988da9ed60d1125d60aa802b7899\",\n          \"blockNumber\": \"0x1af2c10\",\n          \"transactionHash\": \"0xf1133522574a9acd7b25cf90f070a1a1ad9805dfee1924b2f9cf140f19ebb888\",\n          \"transactionIndex\": \"0x2\",\n          \"logIndex\": \"0x5\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000010000000000000000000000000200800000000000000000000100000000004000000000000000000000000000200000000000000000000080000000000000000020000080000000000000000000000000000000000080000000000000000000300000000000000000000000000000000000080000000000000000000000004000008000000028000001000000000000000000000000000400100040000000000000000000000000000000000000000100000000000000000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0xb2d05e0e\"\n    },\n    {\n      \"transactionHash\": \"0x8bce3d412b37bd7c1499d7eb5cf1f6f7f9c150272b8b0cb29aaeebe9e2ac5ae3\",\n      \"transactionIndex\": \"0x3\",\n      \"blockHash\": \"0x20a1ebf99c45724a09b89d7b7a88097ab95f988da9ed60d1125d60aa802b7899\",\n      \"blockNumber\": \"0x1af2c10\",\n      \"from\": \"0x769bC17a26FD41cE24F934403c8492bDfAC6C548\",\n      \"to\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"cumulativeGasUsed\": \"0x3436a4\",\n      \"gasUsed\": \"0xbaa1\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n          \"topics\": [\n            \"0xf1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c\",\n            \"0x000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n            \"0x000000000000000000000000769bc17a26fd41ce24f934403c8492bdfac6c548\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x20a1ebf99c45724a09b89d7b7a88097ab95f988da9ed60d1125d60aa802b7899\",\n          \"blockNumber\": \"0x1af2c10\",\n          \"transactionHash\": \"0x8bce3d412b37bd7c1499d7eb5cf1f6f7f9c150272b8b0cb29aaeebe9e2ac5ae3\",\n          \"transactionIndex\": \"0x3\",\n          \"logIndex\": \"0x6\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x000000000000000000000000769bc17a26fd41ce24f934403c8492bdfac6c548\",\n            \"0x000000000000000000000000be188d6641e8b680743a4815dfa0f6208038960f\"\n          ],\n          \"data\": \"0x0000000000000000000000000000000000000000000000000000825bd9571e000000000000000000000000000000000000000000000000000569c39a3c9da7fc000000000000000000000000000000000000000000002593ec235dff3e2e055f0000000000000000000000000000000000000000000000000569413e634689fc000000000000000000000000000000000000000000002593ec23e05b1785235f\",\n          \"blockHash\": \"0x20a1ebf99c45724a09b89d7b7a88097ab95f988da9ed60d1125d60aa802b7899\",\n          \"blockNumber\": \"0x1af2c10\",\n          \"transactionHash\": \"0x8bce3d412b37bd7c1499d7eb5cf1f6f7f9c150272b8b0cb29aaeebe9e2ac5ae3\",\n          \"transactionIndex\": \"0x3\",\n          \"logIndex\": \"0x7\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000010000000000000000000000000200800000000000000000000100000000004000000000000000000000000000000000000000000000000080000000000000000020000080000000000000000000000000000000000080000000000000002000300000000000000000100000000000000000000000000000000000000000004000008000000028000001000000000000000000000000000400100040000000000000000000000000000000000000000000800000000000000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0xb2d05e0e\"\n    },\n    {\n      \"transactionHash\": \"0x14e545af6c5eda791bbe40b810fab40edcb9fb891f809425d845d5282f429002\",\n      \"transactionIndex\": \"0x4\",\n      \"blockHash\": \"0x20a1ebf99c45724a09b89d7b7a88097ab95f988da9ed60d1125d60aa802b7899\",\n      \"blockNumber\": \"0x1af2c10\",\n      \"from\": \"0x769bC17a26FD41cE24F934403c8492bDfAC6C548\",\n      \"to\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"cumulativeGasUsed\": \"0x349150\",\n      \"gasUsed\": \"0x5aac\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n          \"topics\": [\n            \"0x787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e\",\n            \"0x000000000000000000000000769bc17a26fd41ce24f934403c8492bdfac6c548\",\n            \"0x000000000000000000000000769bc17a26fd41ce24f934403c8492bdfac6c548\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x20a1ebf99c45724a09b89d7b7a88097ab95f988da9ed60d1125d60aa802b7899\",\n          \"blockNumber\": \"0x1af2c10\",\n          \"transactionHash\": \"0x14e545af6c5eda791bbe40b810fab40edcb9fb891f809425d845d5282f429002\",\n          \"transactionIndex\": \"0x4\",\n          \"logIndex\": \"0x8\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x000000000000000000000000769bc17a26fd41ce24f934403c8492bdfac6c548\",\n            \"0x000000000000000000000000be188d6641e8b680743a4815dfa0f6208038960f\"\n          ],\n          \"data\": \"0x00000000000000000000000000000000000000000000000000003f55650b28000000000000000000000000000000000000000000000000000569413e633c552e000000000000000000000000000000000000000000002593ec23e05b1785235f000000000000000000000000000000000000000000000000056901e8fe312d2e000000000000000000000000000000000000000000002593ec241fb07c904b5f\",\n          \"blockHash\": \"0x20a1ebf99c45724a09b89d7b7a88097ab95f988da9ed60d1125d60aa802b7899\",\n          \"blockNumber\": \"0x1af2c10\",\n          \"transactionHash\": \"0x14e545af6c5eda791bbe40b810fab40edcb9fb891f809425d845d5282f429002\",\n          \"transactionIndex\": \"0x4\",\n          \"logIndex\": \"0x9\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000200800000000000000000000100000000004000020000000000000000000000000000000000000000002080000000000000000020000080000000000000000000000000000000000080000000000000000000300000000000000000000000000000000000000000000000000000000000004000008000000000000001000000000000000000000000000400100040000000000000000000000000000000000000000000000000000000000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0xb2d05e0e\"\n    },\n    {\n      \"transactionHash\": \"0xa189ba785b05fe6e6a0ac4b543f8f4dd5ae7090adae8a6ba2697817b36bbbe38\",\n      \"transactionIndex\": \"0x5\",\n      \"blockHash\": \"0x20a1ebf99c45724a09b89d7b7a88097ab95f988da9ed60d1125d60aa802b7899\",\n      \"blockNumber\": \"0x1af2c10\",\n      \"from\": \"0x769bC17a26FD41cE24F934403c8492bDfAC6C548\",\n      \"to\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n      \"cumulativeGasUsed\": \"0x34ec22\",\n      \"gasUsed\": \"0x5ad2\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\",\n          \"topics\": [\n            \"0xf7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c\",\n            \"0x000000000000000000000000769bc17a26fd41ce24f934403c8492bdfac6c548\",\n            \"0x000000000000000000000000769bc17a26fd41ce24f934403c8492bdfac6c548\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x20a1ebf99c45724a09b89d7b7a88097ab95f988da9ed60d1125d60aa802b7899\",\n          \"blockNumber\": \"0x1af2c10\",\n          \"transactionHash\": \"0xa189ba785b05fe6e6a0ac4b543f8f4dd5ae7090adae8a6ba2697817b36bbbe38\",\n          \"transactionIndex\": \"0x5\",\n          \"logIndex\": \"0xa\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x000000000000000000000000769bc17a26fd41ce24f934403c8492bdfac6c548\",\n            \"0x000000000000000000000000be188d6641e8b680743a4815dfa0f6208038960f\"\n          ],\n          \"data\": \"0x00000000000000000000000000000000000000000000000000003f6feff91c00000000000000000000000000000000000000000000000000056901e8fe2c37c6000000000000000000000000000000000000000000002593ec241fb07c904b5f0000000000000000000000000000000000000000000000000568c2790e331bc6000000000000000000000000000000000000000000002593ec245f206c89675f\",\n          \"blockHash\": \"0x20a1ebf99c45724a09b89d7b7a88097ab95f988da9ed60d1125d60aa802b7899\",\n          \"blockNumber\": \"0x1af2c10\",\n          \"transactionHash\": \"0xa189ba785b05fe6e6a0ac4b543f8f4dd5ae7090adae8a6ba2697817b36bbbe38\",\n          \"transactionIndex\": \"0x5\",\n          \"logIndex\": \"0xb\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000200800000000000000000000100000000004000000000000000000000100000000000000000000000000080000000000000000020000080000000000000000000000000000000000080000000000000000000300000000000000000000000000000000000000000000000000000000000004004008000000000800001000000000000000000000000000400100040000000000000000000000000000000000000000000000000000000000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0xb2d05e0e\"\n    }\n  ],\n  \"libraries\": [],\n  \"pending\": [],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/80001/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0xBe9F464Bc8673Dc26AE4f8ED91156c75677762Db\"\n    }\n  },\n  \"timestamp\": 1663954757,\n  \"commit\": \"ec7c23f\"\n}"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/80001/deployExchange-1663955818.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": \"0x999e01a7d4c213c0fa844f13f0c4d951d4337c1f33391b86b38f1fe55f74969d\",\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2E8DCfE708D44ae2e406a1c02DFE2Fa13012f961\",\n        \"0x7D8610E9567d2a6C9FBf66a5A13E9Ba8bb120d43\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"gas\": \"0x40cad7\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b5060405162003b6538038062003b658339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e051610100516101205161014051610160516101805161375e62000407600039600061079e01526000818161043401528181611e9a0152818161206e01528181612a8e0152612b9901526000818161055701528181611e0b0152818161202301528181612abd0152612bc801526000611ac901526000611b1801526000611af301526000611a4c01526000611a7601526000611aa0015261375e6000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80637048027511610182578063d798eff6116100e9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610799578063fa950b48146107c0578063fbddd751146107d3578063fe729aaf146107e657600080fd5b8063e60f0c0514610754578063edef7d8e14610767578063f23a6e611461077a57600080fd5b8063d798eff6146106dd578063d7fb272f146106f0578063d82da83814610713578063e03ac3d014610726578063e2eec4051461072e578063e50e4f971461074157600080fd5b8063a287bdf11161013b578063a287bdf114610654578063a6dfcf8614610667578063ac8a584a1461067a578063b28c51c01461068d578063bc197c811461069e578063c10f1a75146106ca57600080fd5b806370480275146105e257806375d7370a146105f55780637ecebe001461060657806383b8a5ae146106265780639870d7fe1461062e578063a10f3dce1461064157600080fd5b8063429b62e5116102415780635893253c116101fa578063627cdcb9116101d4578063627cdcb914610588578063654f0ce41461059057806368c7450f146105a35780636d70f7ae146105b657600080fd5b80635893253c146105195780635c1548fb146105555780635c975abb1461057b57600080fd5b8063429b62e51461046057806344bea37e146104805780634544f05514610488578063456068d21461049b57806346423aa7146104a35780634a2a11f51461051157600080fd5b80631785f53c116102935780631785f53c1461039b57806324d7806c146103ae5780632dff692d146103db578063346009011461041f5780633b521d78146104325780633d6d35981461045857600080fd5b806301ffc9a7146102db5780630647ee201461030357806306b9d691146103305780631031e36e14610350578063131e7e1c1461035a57806313e7c9d81461036d575b600080fd5b6102ee6102e9366004612bec565b6107f9565b60405190151581526020015b60405180910390f35b6102ee610311366004612c3b565b6001600160a01b03919091166000908152600460205260409020541490565b610338610830565b6040516001600160a01b0390911681526020016102fa565b6103586108a3565b005b600754610338906001600160a01b031681565b61038d61037b366004612c67565b60026020526000908152604090205481565b6040519081526020016102fa565b6103586103a9366004612c67565b6108de565b6102ee6103bc366004612c67565b6001600160a01b03166000908152600160208190526040909120541490565b6104086103e9366004612c84565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016102fa565b61035861042d366004612c84565b610955565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b610358610986565b61038d61046e366004612c67565b60016020526000908152604090205481565b61038d600081565b610358610496366004612c67565b6109f1565b610358610a2b565b6104f46104b1366004612c84565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b6040805182511515815260209283015192810192909252016102fa565b6103e861038d565b610540610527366004612c84565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016102fa565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b6003546102ee9060ff1681565b610358610a64565b61035861059e366004612e84565b610a6e565b6103586105b1366004612eb8565b610a89565b6102ee6105c4366004612c67565b6001600160a01b031660009081526002602052604090205460011490565b6103586105f0366004612c67565b610aca565b6007546001600160a01b0316610338565b61038d610614366004612c67565b60046020526000908152604090205481565b610358610b44565b61035861063c366004612c67565b610bb0565b61038d61064f366004612c84565b610c28565b610338610662366004612c67565b610c46565b610358610675366004612e84565b610c65565b610358610688366004612c67565b610c6e565b6006546001600160a01b0316610338565b6106b16106ac366004612f72565b610ce5565b6040516001600160e01b031990911681526020016102fa565b600654610338906001600160a01b031681565b6103586106eb36600461309e565b610cf7565b61038d6106fe366004612c84565b60009081526005602052604090206001015490565b610358610721366004613101565b610d8f565b610338610db7565b61035861073c366004613123565b610e01565b61038d61074f366004612e84565b610e3d565b61035861076236600461315f565b610eda565b610338610775366004612c67565b610f6c565b6106b16107883660046131f0565b63f23a6e6160e01b95945050505050565b61038d7f000000000000000000000000000000000000000000000000000000000000000081565b6103586107ce366004613258565b610f8b565b6103586107e1366004612c67565b610fc2565b6103586107f436600461328c565b610ffc565b60006001600160e01b03198216630271189760e51b148061082a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546040805163557887a160e11b815290516000926001600160a01b03169163aaf10f429160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e91906132d0565b905090565b33600090815260016020819052604090912054146108d457604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611082565b565b336000908152600160208190526040909120541461090f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610983576040516307ed98ed60e31b815260040160405180910390fd5b50565b336000908152600260205260409020546001146109b657604051631f0853c160e21b815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610a2257604051637bfa4b9f60e01b815260040160405180910390fd5b610983816110bc565b3360009081526001602081905260409091205414610a5c57604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611118565b6108dc600161114f565b6000610a7982610e3d565b9050610a85818361117d565b5050565b3360009081526001602081905260409091205414610aba57604051637bfa4b9f60e01b815260040160405180910390fd5b610ac583838361126b565b505050565b3360009081526001602081905260409091205414610afb57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610b7557604051637bfa4b9f60e01b815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610be157604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610c3382610955565b5060009081526005602052604090205490565b600061082a82610c54610db7565b6007546001600160a01b0316611395565b610983816113f9565b3360009081526001602081905260409091205414610c9f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b63bc197c8160e01b5b95945050505050565b600054600203610d225760405162461bcd60e51b8152600401610d19906132ed565b60405180910390fd5b600260008181553381526020919091526040902054600114610d5757604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610d7b576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336114a1565b50506001600055565b80610d9983610c28565b14610a855760405163337c310560e11b815260040160405180910390fd5b6007546040805163530ca43760e11b815290516000926001600160a01b03169163a619486e9160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b610e2081604001518260200151848461018001518561016001516114fa565b610a8557604051638baa579f60e01b815260040160405180910390fd5b600061082a7fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e6101600151604051602001610ebf9d9c9b9a9998979695949392919061333b565b60405160208183030381529060405280519060200120611558565b600054600203610efc5760405162461bcd60e51b8152600401610d19906132ed565b600260008181553381526020919091526040902054600114610f3157604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610f55576040516313d0ff5960e31b815260040160405180910390fd5b610f61848484846115a6565b505060016000555050565b600061082a82610f7a610830565b6006546001600160a01b0316611747565b805160005b81811015610ac557610fba838281518110610fad57610fad6133cd565b60200260200101516113f9565b600101610f90565b3360009081526001602081905260409091205414610ff357604051637bfa4b9f60e01b815260040160405180910390fd5b61098381611796565b60005460020361101e5760405162461bcd60e51b8152600401610d19906132ed565b60026000818155338152602091909152604090205460011461105357604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615611077576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336117f2565b6003805460ff1916600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b6007546040516001600160a01b038084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6003805460ff1916905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b3360009081526004602052604090205461116a9082906133f9565b3360009081526004602052604090205550565b60008160e001511180156111945750428160e00151105b156111b2576040516362b439dd60e11b815260040160405180910390fd5b6111bc8282610e01565b6103e881610120015111156111e45760405163cd4e616760e01b815260040160405180910390fd5b6111f18160800151610955565b60008281526008602052604090205460ff161561122157604051633d9c5bb760e11b815260040160405180910390fd5b61124e81602001518261010001516001600160a01b03919091166000908152600460205260409020541490565b610a8557604051633ab3447f60e11b815260040160405180910390fd5b8183148061127f575082158061127f575081155b1561129d576040516307ed98ed60e31b815260040160405180910390fd5b6000838152600560205260409020541515806112c6575060008281526005602052604090205415155b156112e457604051630ea075bf60e21b815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b6000806113a184611905565b8051906020012090506000856040516020016113cc91906001600160a01b0391909116815260200190565b6040516020818303038152906040528051906020012090506113ef84838361196b565b9695505050505050565b60208101516001600160a01b03163314611426576040516330cd747160e01b815260040160405180910390fd5b600061143182610e3d565b600081815260086020526040902080549192509060ff161561146657604051633d9c5bb760e11b815260040160405180910390fd5b805460ff1916600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b818110156114f3576114eb8582815181106114c3576114c36133cd565b60200260200101518583815181106114dd576114dd6133cd565b6020026020010151856117f2565b6001016114a6565b5050505050565b60008082600281111561150f5761150f613311565b0361152757611520868686866119aa565b9050610cee565b600282600281111561153b5761153b613311565b0361154c57611520868686866119de565b61152086868686611a18565b600061082a611565611a3f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080806115b58885611b66565b9250925092506000806115c78a611bb6565b915091506115db8a60200151308489611bed565b6115e68a8a89611c17565b6115f08582611c69565b6101208b015190955060009061163290828d6101400151600181111561161857611618613311565b146116235788611625565b875b89898f6101400151611c98565b905061164f308c6020015184848a61164a9190613411565b611bed565b61165b30338484611d88565b60208b810151604080518681529283018590528201899052606082018790526080820183905230916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a46020808c0151604080518681529283018590528201899052606082018890526001600160a01b03169085907f63bf4d16b7fa898ef4c4b2b6d90fd201e9c56313b65638af6088d149d2ce956c9060800160405180910390a3600061172184611de4565b9050801561173957611739308d602001518684611bed565b505050505050505050505050565b6040516bffffffffffffffffffffffff19606085901b16602082015260009061178c908390859060340160405160208183030381529060405280519060200120611ec8565b90505b9392505050565b6006546040516001600160a01b038084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b81600080806118018785611b66565b925092509250600061185e8861012001516000600181111561182557611825613311565b8a6101400151600181111561183c5761183c613311565b146118475786611849565b855b8a60a001518b60c001518c6101400151611c98565b905060008061186c8a611bb6565b91509150611886338b6020015183868a61164a9190613411565b6118968a6020015189848a611bed565b60208a810151604080518581529283018490528201899052606082018790526080820185905233916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a450505050505050505050565b6060604051806101a0016040528061017181526020016135b86101719139604080516001600160a01b03851660208201520160408051601f19818403018152908290526119559291602001613454565b6040516020818303038152906040529050919050565b60008060ff60f81b8584866040516020016119899493929190613483565b60408051808303601f19018152919052805160209091012095945050505050565b6000836001600160a01b0316856001600160a01b03161480156119d357506119d3858484611f1d565b90505b949350505050565b60006119eb858484611f1d565b80156119d35750836001600160a01b0316611a0586610c46565b6001600160a01b03161495945050505050565b6000611a25858484611f1d565b80156119d35750836001600160a01b0316611a0586610f6c565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a9857507f000000000000000000000000000000000000000000000000000000000000000046145b15611ac257507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806000611b788560600151611f45565b611b8185610e3d565b9050611b8d818661117d565b611ba0848660a001518760c00151611f84565b9250611bad818686611fab565b91509250925092565b600080808361014001516001811115611bd157611bd1613311565b03611be157505060800151600091565b50506080015190600090565b81600003611c0557611c00848483612021565b611c11565b611c1184848484612069565b50505050565b815160005b818110156114f357611c6185858381518110611c3a57611c3a6133cd565b6020026020010151858481518110611c5457611c546133cd565b6020026020010151612096565b600101611c1c565b600080611c7583611de4565b90508381101561178f576040516301be9b0160e71b815260040160405180910390fd5b60008515610cee576000611cad85858561217c565b9050600081118015611cc75750670de0b6b3a76400008111155b15611d7e576000836001811115611ce057611ce0613311565b03611d3257611cf1612710826134bc565b86611d0d83611d0881670de0b6b3a7640000613411565b6121eb565b611d17908a6134bc565b611d2191906134bc565b611d2b91906134db565b9150611d7e565b611d46670de0b6b3a76400006127106134bc565b86611d5d83611d0881670de0b6b3a7640000613411565b611d67908a6134bc565b611d7191906134bc565b611d7b91906134db565b91505b5095945050505050565b8015611c1157611d9a84848484611bed565b60408051838152602081018390526001600160a01b038516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b600081600003611e77576040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015611e53573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082a91906134fd565b604051627eeac760e11b8152306004820152602481018390526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90604401611e36565b600080611ed58585612201565b805190602001209050600060ff60f81b868584604051602001611efb9493929190613483565b60408051808303601f1901815291905280516020909101209695505050505050565b6000836001600160a01b0316611f338484612318565b6001600160a01b031614949350505050565b6001600160a01b03811615801590611f6657506001600160a01b0381163314155b1561098357604051635211a07960e01b815260040160405180910390fd5b600082600003611f965750600061178f565b82611fa183866134bc565b61178c91906134db565b60008381526008602052604090206001810154908115611fcb5781611fd1565b8360a001515b915081831115611ff457604051637166356b60e11b815260040160405180910390fd5b611ffe8383613411565b91508160000361201457805460ff191660011781555b6001018190559392505050565b7f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b0385160361205d57611c0081848461233c565b611c1181858585612347565b611c117f000000000000000000000000000000000000000000000000000000000000000085858585612353565b60006120a284846123d9565b90506120af848483612475565b81600080806120be8785611b66565b92509250925060006120e28861012001516000600181111561182557611825613311565b90506000806120f08a611bb6565b9150915061210787878c6020015185858d896124ef565b6020808c01518b8201516040805186815293840185905283018a905260608301889052608083018690526001600160a01b039182169291169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a45050505050505050505050565b60008082600181111561219157612191613311565b036121c957826000036121a55760006121c2565b826121b8670de0b6b3a7640000866134bc565b6121c291906134db565b905061178f565b836000036121d857600061178c565b83611fa1670de0b6b3a7640000856134bc565b60008183106121fa578161178f565b5090919050565b60408051600080825260208201909252606091906122229060448101613516565b60408051601f19818403018152918152602080830180516001600160e01b03166352e831dd60e01b1790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe6020820152600160601b8502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be6041820152600160601b840260608201526e5af43d82803e903d91602b57fd5bf360881b607482015280826040516020016122ff929190613454565b6040516020818303038152906040529250505092915050565b60008060006123278585612556565b915091506123348161259b565b509392505050565b610ac58383836126e5565b611c118484848461275d565b604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b1580156123ba57600080fd5b505af11580156123ce573d6000803e3d6000fd5b505050505050505050565b60008083610140015160018111156123f3576123f3613311565b14801561241657506000826101400151600181111561241457612414613311565b145b156124235750600161082a565b6001836101400151600181111561243c5761243c613311565b14801561245f57506001826101400151600181111561245d5761245d613311565b145b1561246c5750600261082a565b50600092915050565b61247f83836127e0565b61249c57604051633fcd37a360e11b815260040160405180910390fd5b60008160028111156124b0576124b0613311565b036124dd578160800151836080015114610ac55760405163a0b9446560e01b815260040160405180910390fd5b610ac583608001518360800151610d8f565b6124fb8530868a611bed565b612508878786868661282a565b8561251284611de4565b1015612531576040516301be9b0160e71b815260040160405180910390fd5b61254130868561164a858b613411565b61254d30338584611d88565b50505050505050565b600080825160410361258c5760208301516040840151606085015160001a612580878285856128b2565b94509450505050612594565b506000905060025b9250929050565b60008160048111156125af576125af613311565b036125b75750565b60018160048111156125cb576125cb613311565b036126185760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610d19565b600281600481111561262c5761262c613311565b036126795760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610d19565b600381600481111561268d5761268d613311565b036109835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610d19565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611c115760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610d19565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806114f35760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610d19565b60008260c00151600014806127f7575060c0820151155b156128045750600161082a565b61178f61281084612976565b61281984612976565b856101400151856101400151612990565b600081600281111561283e5761283e613311565b146114f357600181600281111561285757612857613311565b0361287d576000828152600560205260409020600101546128789085612a2a565b6114f3565b600281600281111561289157612891613311565b036114f3576000838152600560205260409020600101546128789086612b35565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128e9575060009050600361296d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561293d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129665760006001925092505061296d565b9150600090505b94509492505050565b600061082a8260a001518360c0015184610140015161217c565b6000808360018111156129a5576129a5613311565b036129e95760008260018111156129be576129be613311565b036129df57670de0b6b3a76400006129d685876133f9565b101590506119d6565b50828410156119d6565b60008260018111156129fd576129fd613311565b03612a0c5750838310156119d6565b670de0b6b3a7640000612a1f85876133f9565b111595945050505050565b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612a6057612a606133cd565b602002602001018181525050600281600181518110612a8157612a816133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160e01b031960e084901b168152612b079190600090889087908990600401613549565b600060405180830381600087803b158015612b2157600080fd5b505af115801561254d573d6000803e3d6000fd5b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612b6b57612b6b6133cd565b602002602001018181525050600281600181518110612b8c57612b8c6133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e7212ad7f0000000000000000000000000000000000000000000000000000000000000000612add565b600060208284031215612bfe57600080fd5b81356001600160e01b03198116811461178f57600080fd5b6001600160a01b038116811461098357600080fd5b8035612c3681612c16565b919050565b60008060408385031215612c4e57600080fd5b8235612c5981612c16565b946020939093013593505050565b600060208284031215612c7957600080fd5b813561178f81612c16565b600060208284031215612c9657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b0381118282101715612cd657612cd6612c9d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612d0457612d04612c9d565b604052919050565b803560028110612c3657600080fd5b803560038110612c3657600080fd5b600082601f830112612d3b57600080fd5b81356001600160401b03811115612d5457612d54612c9d565b612d67601f8201601f1916602001612cdc565b818152846020838601011115612d7c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a08284031215612dac57600080fd5b612db4612cb3565b905081358152612dc660208301612c2b565b6020820152612dd760408301612c2b565b6040820152612de860608301612c2b565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140612e3b818401612d0c565b90820152610160612e4d838201612d1b565b90820152610180828101356001600160401b03811115612e6c57600080fd5b612e7885828601612d2a565b82840152505092915050565b600060208284031215612e9657600080fd5b81356001600160401b03811115612eac57600080fd5b6119d684828501612d99565b600080600060608486031215612ecd57600080fd5b505081359360208301359350604090920135919050565b60006001600160401b03821115612efd57612efd612c9d565b5060051b60200190565b600082601f830112612f1857600080fd5b81356020612f2d612f2883612ee4565b612cdc565b82815260059290921b84018101918181019086841115612f4c57600080fd5b8286015b84811015612f675780358352918301918301612f50565b509695505050505050565b600080600080600060a08688031215612f8a57600080fd5b8535612f9581612c16565b94506020860135612fa581612c16565b935060408601356001600160401b0380821115612fc157600080fd5b612fcd89838a01612f07565b94506060880135915080821115612fe357600080fd5b612fef89838a01612f07565b9350608088013591508082111561300557600080fd5b5061301288828901612d2a565b9150509295509295909350565b600082601f83011261303057600080fd5b81356020613040612f2883612ee4565b82815260059290921b8401810191818101908684111561305f57600080fd5b8286015b84811015612f675780356001600160401b038111156130825760008081fd5b6130908986838b0101612d99565b845250918301918301613063565b600080604083850312156130b157600080fd5b82356001600160401b03808211156130c857600080fd5b6130d48683870161301f565b935060208501359150808211156130ea57600080fd5b506130f785828601612f07565b9150509250929050565b6000806040838503121561311457600080fd5b50508035926020909101359150565b6000806040838503121561313657600080fd5b8235915060208301356001600160401b0381111561315357600080fd5b6130f785828601612d99565b6000806000806080858703121561317557600080fd5b84356001600160401b038082111561318c57600080fd5b61319888838901612d99565b955060208701359150808211156131ae57600080fd5b6131ba8883890161301f565b94506040870135935060608701359150808211156131d757600080fd5b506131e487828801612f07565b91505092959194509250565b600080600080600060a0868803121561320857600080fd5b853561321381612c16565b9450602086013561322381612c16565b9350604086013592506060860135915060808601356001600160401b0381111561324c57600080fd5b61301288828901612d2a565b60006020828403121561326a57600080fd5b81356001600160401b0381111561328057600080fd5b6119d68482850161301f565b6000806040838503121561329f57600080fd5b82356001600160401b038111156132b557600080fd5b6132c185828601612d99565b95602094909401359450505050565b6000602082840312156132e257600080fd5b815161178f81612c16565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b6003811061333757613337613311565b9052565b8d8152602081018d90526001600160a01b038c811660408301528b811660608301528a16608082015260a0810189905260c0810188905260e081018790526101008101869052610120810185905261014081018490526101a08101600284106133a6576133a6613311565b836101608301526133bb610180830184613327565b9e9d5050505050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561340c5761340c6133e3565b500190565b600082821015613423576134236133e3565b500390565b60005b8381101561344357818101518382015260200161342b565b83811115611c115750506000910152565b60008351613466818460208801613428565b83519083019061347a818360208801613428565b01949350505050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60008160001904831182151516156134d6576134d66133e3565b500290565b6000826134f857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561350f57600080fd5b5051919050565b6020815260008251806020840152613535816040850160208701613428565b601f01601f19169190910160400192915050565b6001600160a01b038616815260208082018690526040820185905260a06060830181905284519083018190526000918581019160c0850190845b8181101561359f57845183529383019391830191600101613583565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a2646970667358221220d93139e32bae530b273044d07d00326d19debeb5b49b08f172b04a7bc677797964736f6c634300080f00330000000000000000000000002e8dcfe708d44ae2e406a1c02dfe2fa13012f9610000000000000000000000007d8610e9567d2a6c9fbf66a5a13e9ba8bb120d43000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x9aaa83506c9b5ddb21f0eebb9c4f328e821c04aacef8b01a0d61c275c16ec50b\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x1107e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0xdc92ff12528e1297d512077ef17014d7d11530801898a96c59bde64a959b5c0c\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x110f1\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x59508bd1f8541283b91f60a9f719223f95475648bc24139a53f37fcb667a7fad\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x7d3c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0xc923d61fbb2d7351d26e7045cb468ec6e0529d9aa7a8622668762bb4b0334b73\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x84d2\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [],\n  \"libraries\": [],\n  \"pending\": [\n    \"0x999e01a7d4c213c0fa844f13f0c4d951d4337c1f33391b86b38f1fe55f74969d\",\n    \"0x9aaa83506c9b5ddb21f0eebb9c4f328e821c04aacef8b01a0d61c275c16ec50b\",\n    \"0xdc92ff12528e1297d512077ef17014d7d11530801898a96c59bde64a959b5c0c\",\n    \"0x59508bd1f8541283b91f60a9f719223f95475648bc24139a53f37fcb667a7fad\",\n    \"0xc923d61fbb2d7351d26e7045cb468ec6e0529d9aa7a8622668762bb4b0334b73\"\n  ],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/80001/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\"\n    }\n  },\n  \"timestamp\": 1663955818,\n  \"commit\": \"ec7c23f\"\n}"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/80001/deployExchange-1663955831.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": \"0x999e01a7d4c213c0fa844f13f0c4d951d4337c1f33391b86b38f1fe55f74969d\",\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2E8DCfE708D44ae2e406a1c02DFE2Fa13012f961\",\n        \"0x7D8610E9567d2a6C9FBf66a5A13E9Ba8bb120d43\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"gas\": \"0x40cad7\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b5060405162003b6538038062003b658339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e051610100516101205161014051610160516101805161375e62000407600039600061079e01526000818161043401528181611e9a0152818161206e01528181612a8e0152612b9901526000818161055701528181611e0b0152818161202301528181612abd0152612bc801526000611ac901526000611b1801526000611af301526000611a4c01526000611a7601526000611aa0015261375e6000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80637048027511610182578063d798eff6116100e9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610799578063fa950b48146107c0578063fbddd751146107d3578063fe729aaf146107e657600080fd5b8063e60f0c0514610754578063edef7d8e14610767578063f23a6e611461077a57600080fd5b8063d798eff6146106dd578063d7fb272f146106f0578063d82da83814610713578063e03ac3d014610726578063e2eec4051461072e578063e50e4f971461074157600080fd5b8063a287bdf11161013b578063a287bdf114610654578063a6dfcf8614610667578063ac8a584a1461067a578063b28c51c01461068d578063bc197c811461069e578063c10f1a75146106ca57600080fd5b806370480275146105e257806375d7370a146105f55780637ecebe001461060657806383b8a5ae146106265780639870d7fe1461062e578063a10f3dce1461064157600080fd5b8063429b62e5116102415780635893253c116101fa578063627cdcb9116101d4578063627cdcb914610588578063654f0ce41461059057806368c7450f146105a35780636d70f7ae146105b657600080fd5b80635893253c146105195780635c1548fb146105555780635c975abb1461057b57600080fd5b8063429b62e51461046057806344bea37e146104805780634544f05514610488578063456068d21461049b57806346423aa7146104a35780634a2a11f51461051157600080fd5b80631785f53c116102935780631785f53c1461039b57806324d7806c146103ae5780632dff692d146103db578063346009011461041f5780633b521d78146104325780633d6d35981461045857600080fd5b806301ffc9a7146102db5780630647ee201461030357806306b9d691146103305780631031e36e14610350578063131e7e1c1461035a57806313e7c9d81461036d575b600080fd5b6102ee6102e9366004612bec565b6107f9565b60405190151581526020015b60405180910390f35b6102ee610311366004612c3b565b6001600160a01b03919091166000908152600460205260409020541490565b610338610830565b6040516001600160a01b0390911681526020016102fa565b6103586108a3565b005b600754610338906001600160a01b031681565b61038d61037b366004612c67565b60026020526000908152604090205481565b6040519081526020016102fa565b6103586103a9366004612c67565b6108de565b6102ee6103bc366004612c67565b6001600160a01b03166000908152600160208190526040909120541490565b6104086103e9366004612c84565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016102fa565b61035861042d366004612c84565b610955565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b610358610986565b61038d61046e366004612c67565b60016020526000908152604090205481565b61038d600081565b610358610496366004612c67565b6109f1565b610358610a2b565b6104f46104b1366004612c84565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b6040805182511515815260209283015192810192909252016102fa565b6103e861038d565b610540610527366004612c84565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016102fa565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b6003546102ee9060ff1681565b610358610a64565b61035861059e366004612e84565b610a6e565b6103586105b1366004612eb8565b610a89565b6102ee6105c4366004612c67565b6001600160a01b031660009081526002602052604090205460011490565b6103586105f0366004612c67565b610aca565b6007546001600160a01b0316610338565b61038d610614366004612c67565b60046020526000908152604090205481565b610358610b44565b61035861063c366004612c67565b610bb0565b61038d61064f366004612c84565b610c28565b610338610662366004612c67565b610c46565b610358610675366004612e84565b610c65565b610358610688366004612c67565b610c6e565b6006546001600160a01b0316610338565b6106b16106ac366004612f72565b610ce5565b6040516001600160e01b031990911681526020016102fa565b600654610338906001600160a01b031681565b6103586106eb36600461309e565b610cf7565b61038d6106fe366004612c84565b60009081526005602052604090206001015490565b610358610721366004613101565b610d8f565b610338610db7565b61035861073c366004613123565b610e01565b61038d61074f366004612e84565b610e3d565b61035861076236600461315f565b610eda565b610338610775366004612c67565b610f6c565b6106b16107883660046131f0565b63f23a6e6160e01b95945050505050565b61038d7f000000000000000000000000000000000000000000000000000000000000000081565b6103586107ce366004613258565b610f8b565b6103586107e1366004612c67565b610fc2565b6103586107f436600461328c565b610ffc565b60006001600160e01b03198216630271189760e51b148061082a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546040805163557887a160e11b815290516000926001600160a01b03169163aaf10f429160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e91906132d0565b905090565b33600090815260016020819052604090912054146108d457604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611082565b565b336000908152600160208190526040909120541461090f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610983576040516307ed98ed60e31b815260040160405180910390fd5b50565b336000908152600260205260409020546001146109b657604051631f0853c160e21b815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610a2257604051637bfa4b9f60e01b815260040160405180910390fd5b610983816110bc565b3360009081526001602081905260409091205414610a5c57604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611118565b6108dc600161114f565b6000610a7982610e3d565b9050610a85818361117d565b5050565b3360009081526001602081905260409091205414610aba57604051637bfa4b9f60e01b815260040160405180910390fd5b610ac583838361126b565b505050565b3360009081526001602081905260409091205414610afb57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610b7557604051637bfa4b9f60e01b815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610be157604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610c3382610955565b5060009081526005602052604090205490565b600061082a82610c54610db7565b6007546001600160a01b0316611395565b610983816113f9565b3360009081526001602081905260409091205414610c9f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b63bc197c8160e01b5b95945050505050565b600054600203610d225760405162461bcd60e51b8152600401610d19906132ed565b60405180910390fd5b600260008181553381526020919091526040902054600114610d5757604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610d7b576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336114a1565b50506001600055565b80610d9983610c28565b14610a855760405163337c310560e11b815260040160405180910390fd5b6007546040805163530ca43760e11b815290516000926001600160a01b03169163a619486e9160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b610e2081604001518260200151848461018001518561016001516114fa565b610a8557604051638baa579f60e01b815260040160405180910390fd5b600061082a7fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e6101600151604051602001610ebf9d9c9b9a9998979695949392919061333b565b60405160208183030381529060405280519060200120611558565b600054600203610efc5760405162461bcd60e51b8152600401610d19906132ed565b600260008181553381526020919091526040902054600114610f3157604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610f55576040516313d0ff5960e31b815260040160405180910390fd5b610f61848484846115a6565b505060016000555050565b600061082a82610f7a610830565b6006546001600160a01b0316611747565b805160005b81811015610ac557610fba838281518110610fad57610fad6133cd565b60200260200101516113f9565b600101610f90565b3360009081526001602081905260409091205414610ff357604051637bfa4b9f60e01b815260040160405180910390fd5b61098381611796565b60005460020361101e5760405162461bcd60e51b8152600401610d19906132ed565b60026000818155338152602091909152604090205460011461105357604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615611077576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336117f2565b6003805460ff1916600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b6007546040516001600160a01b038084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6003805460ff1916905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b3360009081526004602052604090205461116a9082906133f9565b3360009081526004602052604090205550565b60008160e001511180156111945750428160e00151105b156111b2576040516362b439dd60e11b815260040160405180910390fd5b6111bc8282610e01565b6103e881610120015111156111e45760405163cd4e616760e01b815260040160405180910390fd5b6111f18160800151610955565b60008281526008602052604090205460ff161561122157604051633d9c5bb760e11b815260040160405180910390fd5b61124e81602001518261010001516001600160a01b03919091166000908152600460205260409020541490565b610a8557604051633ab3447f60e11b815260040160405180910390fd5b8183148061127f575082158061127f575081155b1561129d576040516307ed98ed60e31b815260040160405180910390fd5b6000838152600560205260409020541515806112c6575060008281526005602052604090205415155b156112e457604051630ea075bf60e21b815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b6000806113a184611905565b8051906020012090506000856040516020016113cc91906001600160a01b0391909116815260200190565b6040516020818303038152906040528051906020012090506113ef84838361196b565b9695505050505050565b60208101516001600160a01b03163314611426576040516330cd747160e01b815260040160405180910390fd5b600061143182610e3d565b600081815260086020526040902080549192509060ff161561146657604051633d9c5bb760e11b815260040160405180910390fd5b805460ff1916600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b818110156114f3576114eb8582815181106114c3576114c36133cd565b60200260200101518583815181106114dd576114dd6133cd565b6020026020010151856117f2565b6001016114a6565b5050505050565b60008082600281111561150f5761150f613311565b0361152757611520868686866119aa565b9050610cee565b600282600281111561153b5761153b613311565b0361154c57611520868686866119de565b61152086868686611a18565b600061082a611565611a3f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080806115b58885611b66565b9250925092506000806115c78a611bb6565b915091506115db8a60200151308489611bed565b6115e68a8a89611c17565b6115f08582611c69565b6101208b015190955060009061163290828d6101400151600181111561161857611618613311565b146116235788611625565b875b89898f6101400151611c98565b905061164f308c6020015184848a61164a9190613411565b611bed565b61165b30338484611d88565b60208b810151604080518681529283018590528201899052606082018790526080820183905230916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a46020808c0151604080518681529283018590528201899052606082018890526001600160a01b03169085907f63bf4d16b7fa898ef4c4b2b6d90fd201e9c56313b65638af6088d149d2ce956c9060800160405180910390a3600061172184611de4565b9050801561173957611739308d602001518684611bed565b505050505050505050505050565b6040516bffffffffffffffffffffffff19606085901b16602082015260009061178c908390859060340160405160208183030381529060405280519060200120611ec8565b90505b9392505050565b6006546040516001600160a01b038084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b81600080806118018785611b66565b925092509250600061185e8861012001516000600181111561182557611825613311565b8a6101400151600181111561183c5761183c613311565b146118475786611849565b855b8a60a001518b60c001518c6101400151611c98565b905060008061186c8a611bb6565b91509150611886338b6020015183868a61164a9190613411565b6118968a6020015189848a611bed565b60208a810151604080518581529283018490528201899052606082018790526080820185905233916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a450505050505050505050565b6060604051806101a0016040528061017181526020016135b86101719139604080516001600160a01b03851660208201520160408051601f19818403018152908290526119559291602001613454565b6040516020818303038152906040529050919050565b60008060ff60f81b8584866040516020016119899493929190613483565b60408051808303601f19018152919052805160209091012095945050505050565b6000836001600160a01b0316856001600160a01b03161480156119d357506119d3858484611f1d565b90505b949350505050565b60006119eb858484611f1d565b80156119d35750836001600160a01b0316611a0586610c46565b6001600160a01b03161495945050505050565b6000611a25858484611f1d565b80156119d35750836001600160a01b0316611a0586610f6c565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a9857507f000000000000000000000000000000000000000000000000000000000000000046145b15611ac257507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806000611b788560600151611f45565b611b8185610e3d565b9050611b8d818661117d565b611ba0848660a001518760c00151611f84565b9250611bad818686611fab565b91509250925092565b600080808361014001516001811115611bd157611bd1613311565b03611be157505060800151600091565b50506080015190600090565b81600003611c0557611c00848483612021565b611c11565b611c1184848484612069565b50505050565b815160005b818110156114f357611c6185858381518110611c3a57611c3a6133cd565b6020026020010151858481518110611c5457611c546133cd565b6020026020010151612096565b600101611c1c565b600080611c7583611de4565b90508381101561178f576040516301be9b0160e71b815260040160405180910390fd5b60008515610cee576000611cad85858561217c565b9050600081118015611cc75750670de0b6b3a76400008111155b15611d7e576000836001811115611ce057611ce0613311565b03611d3257611cf1612710826134bc565b86611d0d83611d0881670de0b6b3a7640000613411565b6121eb565b611d17908a6134bc565b611d2191906134bc565b611d2b91906134db565b9150611d7e565b611d46670de0b6b3a76400006127106134bc565b86611d5d83611d0881670de0b6b3a7640000613411565b611d67908a6134bc565b611d7191906134bc565b611d7b91906134db565b91505b5095945050505050565b8015611c1157611d9a84848484611bed565b60408051838152602081018390526001600160a01b038516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b600081600003611e77576040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015611e53573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082a91906134fd565b604051627eeac760e11b8152306004820152602481018390526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90604401611e36565b600080611ed58585612201565b805190602001209050600060ff60f81b868584604051602001611efb9493929190613483565b60408051808303601f1901815291905280516020909101209695505050505050565b6000836001600160a01b0316611f338484612318565b6001600160a01b031614949350505050565b6001600160a01b03811615801590611f6657506001600160a01b0381163314155b1561098357604051635211a07960e01b815260040160405180910390fd5b600082600003611f965750600061178f565b82611fa183866134bc565b61178c91906134db565b60008381526008602052604090206001810154908115611fcb5781611fd1565b8360a001515b915081831115611ff457604051637166356b60e11b815260040160405180910390fd5b611ffe8383613411565b91508160000361201457805460ff191660011781555b6001018190559392505050565b7f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b0385160361205d57611c0081848461233c565b611c1181858585612347565b611c117f000000000000000000000000000000000000000000000000000000000000000085858585612353565b60006120a284846123d9565b90506120af848483612475565b81600080806120be8785611b66565b92509250925060006120e28861012001516000600181111561182557611825613311565b90506000806120f08a611bb6565b9150915061210787878c6020015185858d896124ef565b6020808c01518b8201516040805186815293840185905283018a905260608301889052608083018690526001600160a01b039182169291169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a45050505050505050505050565b60008082600181111561219157612191613311565b036121c957826000036121a55760006121c2565b826121b8670de0b6b3a7640000866134bc565b6121c291906134db565b905061178f565b836000036121d857600061178c565b83611fa1670de0b6b3a7640000856134bc565b60008183106121fa578161178f565b5090919050565b60408051600080825260208201909252606091906122229060448101613516565b60408051601f19818403018152918152602080830180516001600160e01b03166352e831dd60e01b1790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe6020820152600160601b8502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be6041820152600160601b840260608201526e5af43d82803e903d91602b57fd5bf360881b607482015280826040516020016122ff929190613454565b6040516020818303038152906040529250505092915050565b60008060006123278585612556565b915091506123348161259b565b509392505050565b610ac58383836126e5565b611c118484848461275d565b604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b1580156123ba57600080fd5b505af11580156123ce573d6000803e3d6000fd5b505050505050505050565b60008083610140015160018111156123f3576123f3613311565b14801561241657506000826101400151600181111561241457612414613311565b145b156124235750600161082a565b6001836101400151600181111561243c5761243c613311565b14801561245f57506001826101400151600181111561245d5761245d613311565b145b1561246c5750600261082a565b50600092915050565b61247f83836127e0565b61249c57604051633fcd37a360e11b815260040160405180910390fd5b60008160028111156124b0576124b0613311565b036124dd578160800151836080015114610ac55760405163a0b9446560e01b815260040160405180910390fd5b610ac583608001518360800151610d8f565b6124fb8530868a611bed565b612508878786868661282a565b8561251284611de4565b1015612531576040516301be9b0160e71b815260040160405180910390fd5b61254130868561164a858b613411565b61254d30338584611d88565b50505050505050565b600080825160410361258c5760208301516040840151606085015160001a612580878285856128b2565b94509450505050612594565b506000905060025b9250929050565b60008160048111156125af576125af613311565b036125b75750565b60018160048111156125cb576125cb613311565b036126185760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610d19565b600281600481111561262c5761262c613311565b036126795760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610d19565b600381600481111561268d5761268d613311565b036109835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610d19565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611c115760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610d19565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806114f35760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610d19565b60008260c00151600014806127f7575060c0820151155b156128045750600161082a565b61178f61281084612976565b61281984612976565b856101400151856101400151612990565b600081600281111561283e5761283e613311565b146114f357600181600281111561285757612857613311565b0361287d576000828152600560205260409020600101546128789085612a2a565b6114f3565b600281600281111561289157612891613311565b036114f3576000838152600560205260409020600101546128789086612b35565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128e9575060009050600361296d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561293d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129665760006001925092505061296d565b9150600090505b94509492505050565b600061082a8260a001518360c0015184610140015161217c565b6000808360018111156129a5576129a5613311565b036129e95760008260018111156129be576129be613311565b036129df57670de0b6b3a76400006129d685876133f9565b101590506119d6565b50828410156119d6565b60008260018111156129fd576129fd613311565b03612a0c5750838310156119d6565b670de0b6b3a7640000612a1f85876133f9565b111595945050505050565b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612a6057612a606133cd565b602002602001018181525050600281600181518110612a8157612a816133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160e01b031960e084901b168152612b079190600090889087908990600401613549565b600060405180830381600087803b158015612b2157600080fd5b505af115801561254d573d6000803e3d6000fd5b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612b6b57612b6b6133cd565b602002602001018181525050600281600181518110612b8c57612b8c6133cd565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e7212ad7f0000000000000000000000000000000000000000000000000000000000000000612add565b600060208284031215612bfe57600080fd5b81356001600160e01b03198116811461178f57600080fd5b6001600160a01b038116811461098357600080fd5b8035612c3681612c16565b919050565b60008060408385031215612c4e57600080fd5b8235612c5981612c16565b946020939093013593505050565b600060208284031215612c7957600080fd5b813561178f81612c16565b600060208284031215612c9657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b0381118282101715612cd657612cd6612c9d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612d0457612d04612c9d565b604052919050565b803560028110612c3657600080fd5b803560038110612c3657600080fd5b600082601f830112612d3b57600080fd5b81356001600160401b03811115612d5457612d54612c9d565b612d67601f8201601f1916602001612cdc565b818152846020838601011115612d7c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a08284031215612dac57600080fd5b612db4612cb3565b905081358152612dc660208301612c2b565b6020820152612dd760408301612c2b565b6040820152612de860608301612c2b565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140612e3b818401612d0c565b90820152610160612e4d838201612d1b565b90820152610180828101356001600160401b03811115612e6c57600080fd5b612e7885828601612d2a565b82840152505092915050565b600060208284031215612e9657600080fd5b81356001600160401b03811115612eac57600080fd5b6119d684828501612d99565b600080600060608486031215612ecd57600080fd5b505081359360208301359350604090920135919050565b60006001600160401b03821115612efd57612efd612c9d565b5060051b60200190565b600082601f830112612f1857600080fd5b81356020612f2d612f2883612ee4565b612cdc565b82815260059290921b84018101918181019086841115612f4c57600080fd5b8286015b84811015612f675780358352918301918301612f50565b509695505050505050565b600080600080600060a08688031215612f8a57600080fd5b8535612f9581612c16565b94506020860135612fa581612c16565b935060408601356001600160401b0380821115612fc157600080fd5b612fcd89838a01612f07565b94506060880135915080821115612fe357600080fd5b612fef89838a01612f07565b9350608088013591508082111561300557600080fd5b5061301288828901612d2a565b9150509295509295909350565b600082601f83011261303057600080fd5b81356020613040612f2883612ee4565b82815260059290921b8401810191818101908684111561305f57600080fd5b8286015b84811015612f675780356001600160401b038111156130825760008081fd5b6130908986838b0101612d99565b845250918301918301613063565b600080604083850312156130b157600080fd5b82356001600160401b03808211156130c857600080fd5b6130d48683870161301f565b935060208501359150808211156130ea57600080fd5b506130f785828601612f07565b9150509250929050565b6000806040838503121561311457600080fd5b50508035926020909101359150565b6000806040838503121561313657600080fd5b8235915060208301356001600160401b0381111561315357600080fd5b6130f785828601612d99565b6000806000806080858703121561317557600080fd5b84356001600160401b038082111561318c57600080fd5b61319888838901612d99565b955060208701359150808211156131ae57600080fd5b6131ba8883890161301f565b94506040870135935060608701359150808211156131d757600080fd5b506131e487828801612f07565b91505092959194509250565b600080600080600060a0868803121561320857600080fd5b853561321381612c16565b9450602086013561322381612c16565b9350604086013592506060860135915060808601356001600160401b0381111561324c57600080fd5b61301288828901612d2a565b60006020828403121561326a57600080fd5b81356001600160401b0381111561328057600080fd5b6119d68482850161301f565b6000806040838503121561329f57600080fd5b82356001600160401b038111156132b557600080fd5b6132c185828601612d99565b95602094909401359450505050565b6000602082840312156132e257600080fd5b815161178f81612c16565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b6003811061333757613337613311565b9052565b8d8152602081018d90526001600160a01b038c811660408301528b811660608301528a16608082015260a0810189905260c0810188905260e081018790526101008101869052610120810185905261014081018490526101a08101600284106133a6576133a6613311565b836101608301526133bb610180830184613327565b9e9d5050505050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561340c5761340c6133e3565b500190565b600082821015613423576134236133e3565b500390565b60005b8381101561344357818101518382015260200161342b565b83811115611c115750506000910152565b60008351613466818460208801613428565b83519083019061347a818360208801613428565b01949350505050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60008160001904831182151516156134d6576134d66133e3565b500290565b6000826134f857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561350f57600080fd5b5051919050565b6020815260008251806020840152613535816040850160208701613428565b601f01601f19169190910160400192915050565b6001600160a01b038616815260208082018690526040820185905260a06060830181905284519083018190526000918581019160c0850190845b8181101561359f57845183529383019391830191600101613583565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a2646970667358221220d93139e32bae530b273044d07d00326d19debeb5b49b08f172b04a7bc677797964736f6c634300080f00330000000000000000000000002e8dcfe708d44ae2e406a1c02dfe2fa13012f9610000000000000000000000007d8610e9567d2a6c9fbf66a5a13e9ba8bb120d43000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x9aaa83506c9b5ddb21f0eebb9c4f328e821c04aacef8b01a0d61c275c16ec50b\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x1107e\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0xdc92ff12528e1297d512077ef17014d7d11530801898a96c59bde64a959b5c0c\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x110f1\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0x59508bd1f8541283b91f60a9f719223f95475648bc24139a53f37fcb667a7fad\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x7d3c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": \"0xc923d61fbb2d7351d26e7045cb468ec6e0529d9aa7a8622668762bb4b0334b73\",\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x09b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n        \"to\": \"0xfffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n        \"gas\": \"0x84d2\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [\n    {\n      \"transactionHash\": \"0x999e01a7d4c213c0fa844f13f0c4d951d4337c1f33391b86b38f1fe55f74969d\",\n      \"transactionIndex\": \"0x3\",\n      \"blockHash\": \"0x5ba3fe70b82958f797ca9ecb042b5aab59dfa823e21f90afedc26de3d22d9d57\",\n      \"blockNumber\": \"0x1af2ce6\",\n      \"from\": \"0x09b39caAd32c6C3999aA3f9248C6dfb01f7806d4\",\n      \"to\": null,\n      \"cumulativeGasUsed\": \"0x3c19b7\",\n      \"gasUsed\": \"0x31d71c\",\n      \"contractAddress\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"logs\": [\n        {\n          \"address\": \"0x2E8DCfE708D44ae2e406a1c02DFE2Fa13012f961\",\n          \"topics\": [\n            \"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\",\n            \"0x000000000000000000000000fffd6f0db1ec30a58884b23546b4f1bb333f818f\",\n            \"0x0000000000000000000000007d8610e9567d2a6c9fbf66a5a13e9ba8bb120d43\"\n          ],\n          \"data\": \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\",\n          \"blockHash\": \"0x5ba3fe70b82958f797ca9ecb042b5aab59dfa823e21f90afedc26de3d22d9d57\",\n          \"blockNumber\": \"0x1af2ce6\",\n          \"transactionHash\": \"0x999e01a7d4c213c0fa844f13f0c4d951d4337c1f33391b86b38f1fe55f74969d\",\n          \"transactionIndex\": \"0x3\",\n          \"logIndex\": \"0x14\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n            \"0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99\"\n          ],\n          \"data\": \"0x0000000000000000000000000000000000000000000000000022d0228bbc4800000000000000000000000000000000000000000000000000058d15e176280000000000000000000000000000000000000000000000000732edd19007eaca5164000000000000000000000000000000000000000000000000056a45beea6bb800000000000000000000000000000000000000000000000732edf4602a76869964\",\n          \"blockHash\": \"0x5ba3fe70b82958f797ca9ecb042b5aab59dfa823e21f90afedc26de3d22d9d57\",\n          \"blockNumber\": \"0x1af2ce6\",\n          \"transactionHash\": \"0x999e01a7d4c213c0fa844f13f0c4d951d4337c1f33391b86b38f1fe55f74969d\",\n          \"transactionIndex\": \"0x3\",\n          \"logIndex\": \"0x15\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00008000000000000000000000000000000000000000000000000010000000000000000000000060004000000000008080008000000000000000000000600000000000000000000000000000000000800000000000000000000100000000000000000000000020000000008000000000000000000000000080000000000000000000000000000000000001000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000004000000000000000000041000400000000000000000000000000100000001000000010000000000000000000000000000000000000000000001000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0xb2d05e12\"\n    },\n    {\n      \"transactionHash\": \"0x9aaa83506c9b5ddb21f0eebb9c4f328e821c04aacef8b01a0d61c275c16ec50b\",\n      \"transactionIndex\": \"0x4\",\n      \"blockHash\": \"0x5ba3fe70b82958f797ca9ecb042b5aab59dfa823e21f90afedc26de3d22d9d57\",\n      \"blockNumber\": \"0x1af2ce6\",\n      \"from\": \"0x09b39caAd32c6C3999aA3f9248C6dfb01f7806d4\",\n      \"to\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"cumulativeGasUsed\": \"0x3cd409\",\n      \"gasUsed\": \"0xba52\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n          \"topics\": [\n            \"0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc\",\n            \"0x000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x5ba3fe70b82958f797ca9ecb042b5aab59dfa823e21f90afedc26de3d22d9d57\",\n          \"blockNumber\": \"0x1af2ce6\",\n          \"transactionHash\": \"0x9aaa83506c9b5ddb21f0eebb9c4f328e821c04aacef8b01a0d61c275c16ec50b\",\n          \"transactionIndex\": \"0x4\",\n          \"logIndex\": \"0x16\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n            \"0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99\"\n          ],\n          \"data\": \"0x00000000000000000000000000000000000000000000000000008224ab0a1c00000000000000000000000000000000000000000000000000056a45bee6ea9808000000000000000000000000000000000000000000000732edf4602a768699640000000000000000000000000000000000000000000000000569c39a3be07c08000000000000000000000000000000000000000000000732edf4e24f2190b564\",\n          \"blockHash\": \"0x5ba3fe70b82958f797ca9ecb042b5aab59dfa823e21f90afedc26de3d22d9d57\",\n          \"blockNumber\": \"0x1af2ce6\",\n          \"transactionHash\": \"0x9aaa83506c9b5ddb21f0eebb9c4f328e821c04aacef8b01a0d61c275c16ec50b\",\n          \"transactionIndex\": \"0x4\",\n          \"logIndex\": \"0x17\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000010000000000000000000000020000000000000008000008000000000010000000000400000010000000000000000000000000000800000000000000000000100000000000000000080000000000000000000200000000000000000000080000000000000000000000000000000000000000001000000000000000000000000000000000000200000000000000000000000000000000000080000000000000000000000004000000000000028000041000000000000000000000000000000100000001000000000000000000000000000000000000100000000000000000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0xb2d05e12\"\n    },\n    {\n      \"transactionHash\": \"0xdc92ff12528e1297d512077ef17014d7d11530801898a96c59bde64a959b5c0c\",\n      \"transactionIndex\": \"0x5\",\n      \"blockHash\": \"0x5ba3fe70b82958f797ca9ecb042b5aab59dfa823e21f90afedc26de3d22d9d57\",\n      \"blockNumber\": \"0x1af2ce6\",\n      \"from\": \"0x09b39caAd32c6C3999aA3f9248C6dfb01f7806d4\",\n      \"to\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"cumulativeGasUsed\": \"0x3d8eaa\",\n      \"gasUsed\": \"0xbaa1\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n          \"topics\": [\n            \"0xf1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c\",\n            \"0x000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x5ba3fe70b82958f797ca9ecb042b5aab59dfa823e21f90afedc26de3d22d9d57\",\n          \"blockNumber\": \"0x1af2ce6\",\n          \"transactionHash\": \"0xdc92ff12528e1297d512077ef17014d7d11530801898a96c59bde64a959b5c0c\",\n          \"transactionIndex\": \"0x5\",\n          \"logIndex\": \"0x18\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n            \"0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99\"\n          ],\n          \"data\": \"0x0000000000000000000000000000000000000000000000000000825bd9571e000000000000000000000000000000000000000000000000000569c39a3bd36244000000000000000000000000000000000000000000000732edf4e24f2190b5640000000000000000000000000000000000000000000000000569413e627c4444000000000000000000000000000000000000000000000732edf564aafae7d364\",\n          \"blockHash\": \"0x5ba3fe70b82958f797ca9ecb042b5aab59dfa823e21f90afedc26de3d22d9d57\",\n          \"blockNumber\": \"0x1af2ce6\",\n          \"transactionHash\": \"0xdc92ff12528e1297d512077ef17014d7d11530801898a96c59bde64a959b5c0c\",\n          \"transactionIndex\": \"0x5\",\n          \"logIndex\": \"0x19\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000010000000000000000000000020000000000000008000008000000000010000000000400000010000000000000000000000000000800000000000000000000100000000000000000080000000000000000000000000000000000000000080000000000000000000000000000000000000000001000000000000000000000000000000002000200000000000000000100000000000000000000000000000000000000000004000000000000028000041000000000000000000000000000000100000001000000000000000000000000000000000000000800000000000000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0xb2d05e12\"\n    },\n    {\n      \"transactionHash\": \"0x59508bd1f8541283b91f60a9f719223f95475648bc24139a53f37fcb667a7fad\",\n      \"transactionIndex\": \"0x6\",\n      \"blockHash\": \"0x5ba3fe70b82958f797ca9ecb042b5aab59dfa823e21f90afedc26de3d22d9d57\",\n      \"blockNumber\": \"0x1af2ce6\",\n      \"from\": \"0x09b39caAd32c6C3999aA3f9248C6dfb01f7806d4\",\n      \"to\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"cumulativeGasUsed\": \"0x3de956\",\n      \"gasUsed\": \"0x5aac\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n          \"topics\": [\n            \"0x787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x5ba3fe70b82958f797ca9ecb042b5aab59dfa823e21f90afedc26de3d22d9d57\",\n          \"blockNumber\": \"0x1af2ce6\",\n          \"transactionHash\": \"0x59508bd1f8541283b91f60a9f719223f95475648bc24139a53f37fcb667a7fad\",\n          \"transactionIndex\": \"0x6\",\n          \"logIndex\": \"0x1a\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n            \"0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99\"\n          ],\n          \"data\": \"0x00000000000000000000000000000000000000000000000000003f55650b28000000000000000000000000000000000000000000000000000569413e626f24f2000000000000000000000000000000000000000000000732edf564aafae7d364000000000000000000000000000000000000000000000000056901e8fd63fcf2000000000000000000000000000000000000000000000732edf5a4005ff2fb64\",\n          \"blockHash\": \"0x5ba3fe70b82958f797ca9ecb042b5aab59dfa823e21f90afedc26de3d22d9d57\",\n          \"blockNumber\": \"0x1af2ce6\",\n          \"transactionHash\": \"0x59508bd1f8541283b91f60a9f719223f95475648bc24139a53f37fcb667a7fad\",\n          \"transactionIndex\": \"0x6\",\n          \"logIndex\": \"0x1b\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000002000000000000000000000010000000000000000000000020000000000000008000008000000000010000000000400000000000000000000000000000000000800000000000000000000100000000000000020080000000000000000000000000000000000000002080000000000000000000000000000000000000000001000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000041000000000000000000000000000000100000001000000000000000000000000000000000000000000000000000000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0xb2d05e12\"\n    },\n    {\n      \"transactionHash\": \"0xc923d61fbb2d7351d26e7045cb468ec6e0529d9aa7a8622668762bb4b0334b73\",\n      \"transactionIndex\": \"0x7\",\n      \"blockHash\": \"0x5ba3fe70b82958f797ca9ecb042b5aab59dfa823e21f90afedc26de3d22d9d57\",\n      \"blockNumber\": \"0x1af2ce6\",\n      \"from\": \"0x09b39caAd32c6C3999aA3f9248C6dfb01f7806d4\",\n      \"to\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n      \"cumulativeGasUsed\": \"0x3e4428\",\n      \"gasUsed\": \"0x5ad2\",\n      \"contractAddress\": null,\n      \"logs\": [\n        {\n          \"address\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\",\n          \"topics\": [\n            \"0xf7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\"\n          ],\n          \"data\": \"0x\",\n          \"blockHash\": \"0x5ba3fe70b82958f797ca9ecb042b5aab59dfa823e21f90afedc26de3d22d9d57\",\n          \"blockNumber\": \"0x1af2ce6\",\n          \"transactionHash\": \"0xc923d61fbb2d7351d26e7045cb468ec6e0529d9aa7a8622668762bb4b0334b73\",\n          \"transactionIndex\": \"0x7\",\n          \"logIndex\": \"0x1c\",\n          \"removed\": false\n        },\n        {\n          \"address\": \"0x0000000000000000000000000000000000001010\",\n          \"topics\": [\n            \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n            \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n            \"0x00000000000000000000000009b39caad32c6c3999aa3f9248c6dfb01f7806d4\",\n            \"0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99\"\n          ],\n          \"data\": \"0x00000000000000000000000000000000000000000000000000003f6feff91c00000000000000000000000000000000000000000000000000056901e8fd5d9cda000000000000000000000000000000000000000000000732edf5a4005ff2fb640000000000000000000000000000000000000000000000000568c2790d6480da000000000000000000000000000000000000000000000732edf5e3704fec1764\",\n          \"blockHash\": \"0x5ba3fe70b82958f797ca9ecb042b5aab59dfa823e21f90afedc26de3d22d9d57\",\n          \"blockNumber\": \"0x1af2ce6\",\n          \"transactionHash\": \"0xc923d61fbb2d7351d26e7045cb468ec6e0529d9aa7a8622668762bb4b0334b73\",\n          \"transactionIndex\": \"0x7\",\n          \"logIndex\": \"0x1d\",\n          \"removed\": false\n        }\n      ],\n      \"status\": \"0x1\",\n      \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000010000000000000000000000020000000000000008000008000000000010000000000400000000000000000000000000000000000800000000000000000000100000000000000000080000000000000100000000000000000000000000080000000000000000000000000000000000000000001000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004004000000000000800041000000000000000000000000000000100000001000000000000000000000000000000000000000000000000000000000000000100000\",\n      \"type\": \"0x2\",\n      \"effectiveGasPrice\": \"0xb2d05e12\"\n    }\n  ],\n  \"libraries\": [],\n  \"pending\": [],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/80001/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0xfffd6f0dB1ec30A58884B23546B4F1bB333f818f\"\n    }\n  },\n  \"timestamp\": 1663955831,\n  \"commit\": \"ec7c23f\"\n}"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/80001/deployExchange-1664228099.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": null,\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2E8DCfE708D44ae2e406a1c02DFE2Fa13012f961\",\n        \"0x7D8610E9567d2a6C9FBf66a5A13E9Ba8bb120d43\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"gas\": \"0x4d4c99\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b506040516200473f3803806200473f8339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516143386200040760003960006108970152600081816104c801528181612698015281816129450152818161355201526136820152600081816105eb015281816125e3015281816128ed0152818161358e01526136be01526000612258015260006122a701526000612282015260006121db015260006122050152600061222f01526143386000f3fe608060405234801561001057600080fd5b50600436106103365760003560e01c806370480275116101b2578063d798eff6116100f9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610892578063fa950b48146108b9578063fbddd751146108cc578063fe729aaf146108df57600080fd5b8063e60f0c0514610834578063edef7d8e14610847578063f23a6e611461085a57600080fd5b8063e03ac3d0116100d3578063e03ac3d014610806578063e2eec4051461080e578063e50e4f971461082157600080fd5b8063d798eff6146107bd578063d7fb272f146107d0578063d82da838146107f357600080fd5b8063a287bdf11161015b578063b28c51c011610135578063b28c51c01461073b578063bc197c8114610759578063c10f1a751461079d57600080fd5b8063a287bdf114610702578063a6dfcf8614610715578063ac8a584a1461072857600080fd5b806383b8a5ae1161018c57806383b8a5ae146106d45780639870d7fe146106dc578063a10f3dce146106ef57600080fd5b8063704802751461068357806375d7370a146106965780637ecebe00146106b457600080fd5b8063429b62e5116102815780635893253c1161022a578063627cdcb911610204578063627cdcb91461061c578063654f0ce41461062457806368c7450f146106375780636d70f7ae1461064a57600080fd5b80635893253c146105ad5780635c1548fb146105e95780635c975abb1461060f57600080fd5b8063456068d21161025b578063456068d21461052f57806346423aa7146105375780634a2a11f5146105a557600080fd5b8063429b62e5146104f457806344bea37e146105145780634544f0551461051c57600080fd5b80631785f53c116102e357806334600901116102bd57806334600901146104b35780633b521d78146104c65780633d6d3598146104ec57600080fd5b80631785f53c1461042257806324d7806c146104355780632dff692d1461046f57600080fd5b80631031e36e116103145780631031e36e146103ca578063131e7e1c146103d457806313e7c9d8146103f457600080fd5b806301ffc9a71461033b5780630647ee201461036357806306b9d6911461039d575b600080fd5b61034e6103493660046136e2565b6108f2565b60405190151581526020015b60405180910390f35b61034e610371366004613756565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600460205260409020541490565b6103a561098b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161035a565b6103d2610a24565b005b6007546103a59073ffffffffffffffffffffffffffffffffffffffff1681565b610414610402366004613782565b60026020526000908152604090205481565b60405190815260200161035a565b6103d2610430366004613782565b610a78565b61034e610443366004613782565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160208190526040909120541490565b61049c61047d36600461379f565b6008602052600090815260409020805460019091015460ff9091169082565b60408051921515835260208301919091520161035a565b6103d26104c136600461379f565b610b15565b7f00000000000000000000000000000000000000000000000000000000000000006103a5565b6103d2610b5f565b610414610502366004613782565b60016020526000908152604090205481565b610414600081565b6103d261052a366004613782565b610be3565b6103d2610c36565b61058861054536600461379f565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b60408051825115158152602092830151928101929092520161035a565b6103e8610414565b6105d46105bb36600461379f565b6005602052600090815260409020805460019091015482565b6040805192835260208301919091520161035a565b7f00000000000000000000000000000000000000000000000000000000000000006103a5565b60035461034e9060ff1681565b6103d2610c88565b6103d26106323660046139f8565b610c92565b6103d2610645366004613a2d565b610cad565b61034e610658366004613782565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460011490565b6103d2610691366004613782565b610d07565b60075473ffffffffffffffffffffffffffffffffffffffff166103a5565b6104146106c2366004613782565b60046020526000908152604090205481565b6103d2610da7565b6103d26106ea366004613782565b610e2c565b6104146106fd36600461379f565b610eca565b6103a5610710366004613782565b610ee8565b6103d26107233660046139f8565b610f14565b6103d2610736366004613782565b610f1d565b60065473ffffffffffffffffffffffffffffffffffffffff166103a5565b61076c610767366004613ae8565b610fba565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161035a565b6006546103a59073ffffffffffffffffffffffffffffffffffffffff1681565b6103d26107cb366004613c16565b610fe5565b6104146107de36600461379f565b60009081526005602052604090206001015490565b6103d2610801366004613c7a565b6110f5565b6103a5611136565b6103d261081c366004613c9c565b6111a6565b61041461082f3660046139f8565b6111fb565b6103d2610842366004613cd9565b611298565b6103a5610855366004613782565b6113a6565b61076c610868366004613d6b565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b6104147f000000000000000000000000000000000000000000000000000000000000000081565b6103d26108c7366004613dd4565b6113d2565b6103d26108da366004613782565b611409565b6103d26108ed366004613e09565b61145c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000148061098557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600654604080517faaf10f42000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163aaf10f429160048083019260209291908290030181865afa1580156109fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1f9190613e4e565b905090565b3360009081526001602081905260409091205414610a6e576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a7661155e565b565b3360009081526001602081905260409091205414610ac2576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610b5c576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b33600090815260026020526040902054600114610ba8576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610c2d576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5c816115b6565b3360009081526001602081905260409091205414610c80576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a76611644565b610a766001611699565b6000610c9d826111fb565b9050610ca981836116c7565b5050565b3360009081526001602081905260409091205414610cf7576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d02838383611826565b505050565b3360009081526001602081905260409091205414610d51576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610df1576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610e76576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610ed582610b15565b5060009081526005602052604090205490565b600061098582610ef6611136565b60075473ffffffffffffffffffffffffffffffffffffffff16611982565b610b5c81611a80565b3360009081526001602081905260409091205414610f67576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b7fbc197c81000000000000000000000000000000000000000000000000000000005b95945050505050565b600054600203611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6002600081815533815260209190915260409020546001146110a4576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff16156110e1576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ec828233611b85565b50506001600055565b806110ff83610eca565b14610ca9576040517f66f8620a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600754604080517fa619486e000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163a619486e9160048083019260209291908290030181865afa1580156109fb573d6000803e3d6000fd5b6111c58160400151826020015184846101800151856101600151611bde565b610ca9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109857fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e610160015160405160200161127d9d9c9b9a99989796959493929190613eae565b60405160208183030381529060405280519060200120611c3c565b600054600203611304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161104d565b600260008181553381526020919091526040902054600114611352576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff161561138f576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139b84848484611ca5565b505060016000555050565b6000610985826113b461098b565b60065473ffffffffffffffffffffffffffffffffffffffff16611e5c565b805160005b81811015610d02576114018382815181106113f4576113f4613f4c565b6020026020010151611a80565b6001016113d7565b3360009081526001602081905260409091205414611453576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5c81611ebe565b6000546002036114c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161104d565b600260008181553381526020919091526040902054600114611516576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff1615611553576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ec828233611f4c565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b60075460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b336000908152600460205260409020546116b4908290613faa565b3360009081526004602052604090205550565b60008160e001511180156116de5750428160e00151105b15611715576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61171f82826111a6565b6103e88161012001511115611760576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61176d8160800151610b15565b60008281526008602052604090205460ff16156117b6576040517f7b38b76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117f0816020015182610100015173ffffffffffffffffffffffffffffffffffffffff919091166000908152600460205260409020541490565b610ca9576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8183148061183a575082158061183a575081155b15611871576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526005602052604090205415158061189a575060008281526005602052604090205415155b156118d1576040517f3a81d6fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b60008061198e8461205a565b8051906020012090506000856040516020016119c6919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020918201207fff000000000000000000000000000000000000000000000000000000000000008285015260609790971b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021840152603583019690965260558083019490945280518083039094018452607590910190525080519201919091209392505050565b602081015173ffffffffffffffffffffffffffffffffffffffff163314611ad3576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611ade826111fb565b600081815260086020526040902080549192509060ff1615611b2c576040517f7b38b76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b81811015611bd757611bcf858281518110611ba757611ba7613f4c565b6020026020010151858381518110611bc157611bc1613f4c565b602002602001015185611f4c565b600101611b8a565b5050505050565b600080826002811115611bf357611bf3613e6b565b03611c0b57611c04868686866120eb565b9050610fdc565b6002826002811115611c1f57611c1f613e6b565b03611c3057611c0486868686612139565b611c048686868661218d565b6000610985611c496121c1565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080611cb387846122f5565b91509150600080611cc389612342565b91509150611cd78960200151308488612379565b611ce28989886123a3565b611cec84826123f5565b6101208a0151909450600090611d2e90828c61014001516001811115611d1457611d14613e6b565b14611d1f5787611d21565b865b88888e610140015161243d565b9050611d4b308b60200151848489611d469190613fc2565b612379565b611d573033848461252d565b6000611d6284612596565b90508015611d7a57611d7a308c602001518684612379565b60208b8101516040805187815292830186905282018990526060820188905260808201849052309173ffffffffffffffffffffffffffffffffffffffff9091169087907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a46020808c01516040805187815292830186905282018990526060820188905273ffffffffffffffffffffffffffffffffffffffff169086907f63bf4d16b7fa898ef4c4b2b6d90fd201e9c56313b65638af6088d149d2ce956c9060800160405180910390a35050505050505050505050565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b166020820152600090611eb49083908590603401604051602081830303815290604052805190602001206126c6565b90505b9392505050565b60065460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b81600080611f5a86846122f5565b6101208801519193509150600090611fa790825b8961014001516001811115611f8557611f85613e6b565b14611f905785611f92565b845b8960a001518a60c001518b610140015161243d565b9050600080611fb589612342565b91509150611fcf338a60200151838689611d469190613fc2565b611fdf8960200151888489612379565b6020898101516040805185815292830184905282018890526060820187905260808201859052339173ffffffffffffffffffffffffffffffffffffffff9091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a4505050505050505050565b6060604051806101a00160405280610171815260200161419261017191396040805173ffffffffffffffffffffffffffffffffffffffff8516602082015201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526120d59291602001614005565b6040516020818303038152906040529050919050565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561212e575061212e858484612763565b90505b949350505050565b6000612146858484612763565b801561212e57508373ffffffffffffffffffffffffffffffffffffffff1661216d86610ee8565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b600061219a858484612763565b801561212e57508373ffffffffffffffffffffffffffffffffffffffff1661216d866113a6565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561222757507f000000000000000000000000000000000000000000000000000000000000000046145b1561225157507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008061230584606001516127a5565b61230e846111fb565b905061231a81856116c7565b61232d838560a001518660c00151612817565b915061233a81858561283e565b509250929050565b60008080836101400151600181111561235d5761235d613e6b565b0361236d57505060800151600091565b50506080015190600090565b816000036123915761238c8484836128eb565b61239d565b61239d84848484612940565b50505050565b815160005b81811015611bd7576123ed858583815181106123c6576123c6613f4c565b60200260200101518584815181106123e0576123e0613f4c565b602002602001015161296d565b6001016123a8565b60008061240183612596565b905083811015611eb7576040517fdf4d808000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008515610fdc576000612452858585612a52565b905060008111801561246c5750670de0b6b3a76400008111155b1561252357600083600181111561248557612485613e6b565b036124d75761249661271082614034565b866124b2836124ad81670de0b6b3a7640000613fc2565b612ac1565b6124bc908a614034565b6124c69190614034565b6124d09190614071565b9150612523565b6124eb670de0b6b3a7640000612710614034565b86612502836124ad81670de0b6b3a7640000613fc2565b61250c908a614034565b6125169190614034565b6125209190614071565b91505b5095945050505050565b801561239d5761253f84848484612379565b604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff8516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b60008160000361264f576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa15801561262b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098591906140ac565b6040517efdd58e0000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e9060440161260e565b6000806126d38585612ad7565b8051602091820120604080517fff000000000000000000000000000000000000000000000000000000000000008185015260609890981b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021890152603588019590955260558088019190915284518088039091018152607590960190935250508251920191909120919050565b60008373ffffffffffffffffffffffffffffffffffffffff166127868484612c5a565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b73ffffffffffffffffffffffffffffffffffffffff8116158015906127e0575073ffffffffffffffffffffffffffffffffffffffff81163314155b15610b5c576040517f5211a07900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008260000361282957506000611eb7565b826128348386614034565b611eb49190614071565b6000838152600860205260409020600181015490811561285e5781612864565b8360a001515b9150818311156128a0576040517fe2cc6ad600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128aa8383613fc2565b9150816000036128de5780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781555b6001018190559392505050565b7f00000000000000000000000000000000000000000000000000000000000000003073ffffffffffffffffffffffffffffffffffffffff8516036129345761238c818484612c7e565b61239d81858585612c89565b61239d7f000000000000000000000000000000000000000000000000000000000000000085858585612c95565b60006129798484612d41565b9050612986848483612ddd565b8160008061299486846122f5565b61012088015191935091506000906129ac9082611f6e565b90506000806129ba89612342565b915091506129d186868b6020015185858c89612e89565b6020808b01518a820151604080518681529384018590528301899052606083018890526080830186905273ffffffffffffffffffffffffffffffffffffffff9182169291169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a450505050505050505050565b600080826001811115612a6757612a67613e6b565b03612a9f5782600003612a7b576000612a98565b82612a8e670de0b6b3a764000086614034565b612a989190614071565b9050611eb7565b83600003612aae576000611eb4565b83612834670de0b6b3a764000085614034565b6000818310612ad05781611eb7565b5090919050565b6040805160008082526020820190925260609190612af890604481016140c5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f52e831dd000000000000000000000000000000000000000000000000000000001790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe60208201526c010000000000000000000000008502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be60418201526c01000000000000000000000000840260608201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060748201528082604051602001612c41929190614005565b6040516020818303038152906040529250505092915050565b6000806000612c698585612f09565b91509150612c7681612f4e565b509392505050565b610d02838383613101565b61239d848484846131ba565b6040517ff242432a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b158015612d2257600080fd5b505af1158015612d36573d6000803e3d6000fd5b505050505050505050565b6000808361014001516001811115612d5b57612d5b613e6b565b148015612d7e575060008261014001516001811115612d7c57612d7c613e6b565b145b15612d8b57506001610985565b60018361014001516001811115612da457612da4613e6b565b148015612dc7575060018261014001516001811115612dc557612dc5613e6b565b145b15612dd457506002610985565b50600092915050565b612de78383613279565b612e1d576040517f7f9a6f4600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816002811115612e3157612e31613e6b565b03612e77578160800151836080015114610d02576040517fa0b9446500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d02836080015183608001516110f5565b612e958530868a612379565b612ea287878686866132c3565b85612eac84612596565b1015612ee4576040517fdf4d808000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ef4308685611d46858b613fc2565b612f003033858461252d565b50505050505050565b6000808251604103612f3f5760208301516040840151606085015160001a612f338782858561334b565b94509450505050612f47565b506000905060025b9250929050565b6000816004811115612f6257612f62613e6b565b03612f6a5750565b6001816004811115612f7e57612f7e613e6b565b03612fe5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161104d565b6002816004811115612ff957612ff9613e6b565b03613060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161104d565b600381600481111561307457613074613e6b565b03610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161104d565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d116001600051141617169150508061239d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015260640161104d565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080611bd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000604482015260640161104d565b60008260c0015160001480613290575060c0820151155b1561329d57506001610985565b611eb76132a98461343a565b6132b28461343a565b856101400151856101400151613454565b60008160028111156132d7576132d7613e6b565b14611bd75760018160028111156132f0576132f0613e6b565b036133165760008281526005602052604090206001015461331190856134ee565b611bd7565b600281600281111561332a5761332a613e6b565b03611bd757600083815260056020526040902060010154613311908661361e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156133825750600090506003613431565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156133d6573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661342a57600060019250925050613431565b9150600090505b94509492505050565b60006109858260a001518360c00151846101400151612a52565b60008083600181111561346957613469613e6b565b036134ad57600082600181111561348257613482613e6b565b036134a357670de0b6b3a764000061349a8587613faa565b10159050612131565b5082841015612131565b60008260018111156134c1576134c1613e6b565b036134d0575083831015612131565b670de0b6b3a76400006134e38587613faa565b111595945050505050565b60408051600280825260608201835260009260208301908036833701905050905060018160008151811061352457613524613f4c565b60200260200101818152505060028160018151811061354557613545613f4c565b60209081029190910101527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526135f09190600090889087908990600401614116565b600060405180830381600087803b15801561360a57600080fd5b505af1158015612f00573d6000803e3d6000fd5b60408051600280825260608201835260009260208301908036833701905050905060018160008151811061365457613654613f4c565b60200260200101818152505060028160018151811061367557613675613f4c565b60209081029190910101527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639e7212ad7f00000000000000000000000000000000000000000000000000000000000000006135ae565b6000602082840312156136f457600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611eb757600080fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610b5c57600080fd5b803561375181613724565b919050565b6000806040838503121561376957600080fd5b823561377481613724565b946020939093013593505050565b60006020828403121561379457600080fd5b8135611eb781613724565b6000602082840312156137b157600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101a0810167ffffffffffffffff8111828210171561380b5761380b6137b8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613858576138586137b8565b604052919050565b80356002811061375157600080fd5b80356003811061375157600080fd5b600082601f83011261388f57600080fd5b813567ffffffffffffffff8111156138a9576138a96137b8565b6138da60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613811565b8181528460208386010111156138ef57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a0828403121561391f57600080fd5b6139276137e7565b90508135815261393960208301613746565b602082015261394a60408301613746565b604082015261395b60608301613746565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101406139ae818401613860565b908201526101606139c083820161386f565b908201526101808281013567ffffffffffffffff8111156139e057600080fd5b6139ec8582860161387e565b82840152505092915050565b600060208284031215613a0a57600080fd5b813567ffffffffffffffff811115613a2157600080fd5b6121318482850161390c565b600080600060608486031215613a4257600080fd5b505081359360208301359350604090920135919050565b600067ffffffffffffffff821115613a7357613a736137b8565b5060051b60200190565b600082601f830112613a8e57600080fd5b81356020613aa3613a9e83613a59565b613811565b82815260059290921b84018101918181019086841115613ac257600080fd5b8286015b84811015613add5780358352918301918301613ac6565b509695505050505050565b600080600080600060a08688031215613b0057600080fd5b8535613b0b81613724565b94506020860135613b1b81613724565b9350604086013567ffffffffffffffff80821115613b3857600080fd5b613b4489838a01613a7d565b94506060880135915080821115613b5a57600080fd5b613b6689838a01613a7d565b93506080880135915080821115613b7c57600080fd5b50613b898882890161387e565b9150509295509295909350565b600082601f830112613ba757600080fd5b81356020613bb7613a9e83613a59565b82815260059290921b84018101918181019086841115613bd657600080fd5b8286015b84811015613add57803567ffffffffffffffff811115613bfa5760008081fd5b613c088986838b010161390c565b845250918301918301613bda565b60008060408385031215613c2957600080fd5b823567ffffffffffffffff80821115613c4157600080fd5b613c4d86838701613b96565b93506020850135915080821115613c6357600080fd5b50613c7085828601613a7d565b9150509250929050565b60008060408385031215613c8d57600080fd5b50508035926020909101359150565b60008060408385031215613caf57600080fd5b82359150602083013567ffffffffffffffff811115613ccd57600080fd5b613c708582860161390c565b60008060008060808587031215613cef57600080fd5b843567ffffffffffffffff80821115613d0757600080fd5b613d138883890161390c565b95506020870135915080821115613d2957600080fd5b613d3588838901613b96565b9450604087013593506060870135915080821115613d5257600080fd5b50613d5f87828801613a7d565b91505092959194509250565b600080600080600060a08688031215613d8357600080fd5b8535613d8e81613724565b94506020860135613d9e81613724565b93506040860135925060608601359150608086013567ffffffffffffffff811115613dc857600080fd5b613b898882890161387e565b600060208284031215613de657600080fd5b813567ffffffffffffffff811115613dfd57600080fd5b61213184828501613b96565b60008060408385031215613e1c57600080fd5b823567ffffffffffffffff811115613e3357600080fd5b613e3f8582860161390c565b95602094909401359450505050565b600060208284031215613e6057600080fd5b8151611eb781613724565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110613eaa57613eaa613e6b565b9052565b60006101a0820190508e82528d602083015273ffffffffffffffffffffffffffffffffffffffff808e166040840152808d166060840152808c166080840152508960a08301528860c08301528760e083015286610100830152856101208301528461014083015260028410613f2557613f25613e6b565b83610160830152613f3a610180830184613e9a565b9e9d5050505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115613fbd57613fbd613f7b565b500190565b600082821015613fd457613fd4613f7b565b500390565b60005b83811015613ff4578181015183820152602001613fdc565b8381111561239d5750506000910152565b60008351614017818460208801613fd9565b83519083019061402b818360208801613fd9565b01949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561406c5761406c613f7b565b500290565b6000826140a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000602082840312156140be57600080fd5b5051919050565b60208152600082518060208401526140e4816040850160208701613fd9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060a0820173ffffffffffffffffffffffffffffffffffffffff881683526020878185015286604085015260a0606085015281865180845260c086019150828801935060005b818110156141795784518352938301939183019160010161415d565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a264697066735822122056df26e165b5957191bd0ff149c07ae13f5a6b4252973fb3c07a4653cce0f3b164736f6c634300080f00330000000000000000000000002e8dcfe708d44ae2e406a1c02dfe2fa13012f9610000000000000000000000007d8610e9567d2a6c9fbf66a5a13e9ba8bb120d43000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x1107c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x10169\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x7d00\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x7d34\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [],\n  \"libraries\": [],\n  \"pending\": [],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/80001/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\"\n    }\n  },\n  \"timestamp\": 1664228099,\n  \"commit\": \"af3ba7f\"\n}"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/80001/deployExchange-1664228139.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": \"0x4cf5ff4362abb630398f45b0ed26787e7b2524c53c4cc006641764f5f8267609\",\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2E8DCfE708D44ae2e406a1c02DFE2Fa13012f961\",\n        \"0x7D8610E9567d2a6C9FBf66a5A13E9Ba8bb120d43\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"gas\": \"0x4d4c99\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b506040516200473f3803806200473f8339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516143386200040760003960006108970152600081816104c801528181612698015281816129450152818161355201526136820152600081816105eb015281816125e3015281816128ed0152818161358e01526136be01526000612258015260006122a701526000612282015260006121db015260006122050152600061222f01526143386000f3fe608060405234801561001057600080fd5b50600436106103365760003560e01c806370480275116101b2578063d798eff6116100f9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610892578063fa950b48146108b9578063fbddd751146108cc578063fe729aaf146108df57600080fd5b8063e60f0c0514610834578063edef7d8e14610847578063f23a6e611461085a57600080fd5b8063e03ac3d0116100d3578063e03ac3d014610806578063e2eec4051461080e578063e50e4f971461082157600080fd5b8063d798eff6146107bd578063d7fb272f146107d0578063d82da838146107f357600080fd5b8063a287bdf11161015b578063b28c51c011610135578063b28c51c01461073b578063bc197c8114610759578063c10f1a751461079d57600080fd5b8063a287bdf114610702578063a6dfcf8614610715578063ac8a584a1461072857600080fd5b806383b8a5ae1161018c57806383b8a5ae146106d45780639870d7fe146106dc578063a10f3dce146106ef57600080fd5b8063704802751461068357806375d7370a146106965780637ecebe00146106b457600080fd5b8063429b62e5116102815780635893253c1161022a578063627cdcb911610204578063627cdcb91461061c578063654f0ce41461062457806368c7450f146106375780636d70f7ae1461064a57600080fd5b80635893253c146105ad5780635c1548fb146105e95780635c975abb1461060f57600080fd5b8063456068d21161025b578063456068d21461052f57806346423aa7146105375780634a2a11f5146105a557600080fd5b8063429b62e5146104f457806344bea37e146105145780634544f0551461051c57600080fd5b80631785f53c116102e357806334600901116102bd57806334600901146104b35780633b521d78146104c65780633d6d3598146104ec57600080fd5b80631785f53c1461042257806324d7806c146104355780632dff692d1461046f57600080fd5b80631031e36e116103145780631031e36e146103ca578063131e7e1c146103d457806313e7c9d8146103f457600080fd5b806301ffc9a71461033b5780630647ee201461036357806306b9d6911461039d575b600080fd5b61034e6103493660046136e2565b6108f2565b60405190151581526020015b60405180910390f35b61034e610371366004613756565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600460205260409020541490565b6103a561098b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161035a565b6103d2610a24565b005b6007546103a59073ffffffffffffffffffffffffffffffffffffffff1681565b610414610402366004613782565b60026020526000908152604090205481565b60405190815260200161035a565b6103d2610430366004613782565b610a78565b61034e610443366004613782565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160208190526040909120541490565b61049c61047d36600461379f565b6008602052600090815260409020805460019091015460ff9091169082565b60408051921515835260208301919091520161035a565b6103d26104c136600461379f565b610b15565b7f00000000000000000000000000000000000000000000000000000000000000006103a5565b6103d2610b5f565b610414610502366004613782565b60016020526000908152604090205481565b610414600081565b6103d261052a366004613782565b610be3565b6103d2610c36565b61058861054536600461379f565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b60408051825115158152602092830151928101929092520161035a565b6103e8610414565b6105d46105bb36600461379f565b6005602052600090815260409020805460019091015482565b6040805192835260208301919091520161035a565b7f00000000000000000000000000000000000000000000000000000000000000006103a5565b60035461034e9060ff1681565b6103d2610c88565b6103d26106323660046139f8565b610c92565b6103d2610645366004613a2d565b610cad565b61034e610658366004613782565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460011490565b6103d2610691366004613782565b610d07565b60075473ffffffffffffffffffffffffffffffffffffffff166103a5565b6104146106c2366004613782565b60046020526000908152604090205481565b6103d2610da7565b6103d26106ea366004613782565b610e2c565b6104146106fd36600461379f565b610eca565b6103a5610710366004613782565b610ee8565b6103d26107233660046139f8565b610f14565b6103d2610736366004613782565b610f1d565b60065473ffffffffffffffffffffffffffffffffffffffff166103a5565b61076c610767366004613ae8565b610fba565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161035a565b6006546103a59073ffffffffffffffffffffffffffffffffffffffff1681565b6103d26107cb366004613c16565b610fe5565b6104146107de36600461379f565b60009081526005602052604090206001015490565b6103d2610801366004613c7a565b6110f5565b6103a5611136565b6103d261081c366004613c9c565b6111a6565b61041461082f3660046139f8565b6111fb565b6103d2610842366004613cd9565b611298565b6103a5610855366004613782565b6113a6565b61076c610868366004613d6b565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b6104147f000000000000000000000000000000000000000000000000000000000000000081565b6103d26108c7366004613dd4565b6113d2565b6103d26108da366004613782565b611409565b6103d26108ed366004613e09565b61145c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000148061098557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600654604080517faaf10f42000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163aaf10f429160048083019260209291908290030181865afa1580156109fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1f9190613e4e565b905090565b3360009081526001602081905260409091205414610a6e576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a7661155e565b565b3360009081526001602081905260409091205414610ac2576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610b5c576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b33600090815260026020526040902054600114610ba8576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610c2d576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5c816115b6565b3360009081526001602081905260409091205414610c80576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a76611644565b610a766001611699565b6000610c9d826111fb565b9050610ca981836116c7565b5050565b3360009081526001602081905260409091205414610cf7576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d02838383611826565b505050565b3360009081526001602081905260409091205414610d51576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610df1576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610e76576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610ed582610b15565b5060009081526005602052604090205490565b600061098582610ef6611136565b60075473ffffffffffffffffffffffffffffffffffffffff16611982565b610b5c81611a80565b3360009081526001602081905260409091205414610f67576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b7fbc197c81000000000000000000000000000000000000000000000000000000005b95945050505050565b600054600203611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6002600081815533815260209190915260409020546001146110a4576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff16156110e1576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ec828233611b85565b50506001600055565b806110ff83610eca565b14610ca9576040517f66f8620a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600754604080517fa619486e000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163a619486e9160048083019260209291908290030181865afa1580156109fb573d6000803e3d6000fd5b6111c58160400151826020015184846101800151856101600151611bde565b610ca9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109857fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e610160015160405160200161127d9d9c9b9a99989796959493929190613eae565b60405160208183030381529060405280519060200120611c3c565b600054600203611304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161104d565b600260008181553381526020919091526040902054600114611352576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff161561138f576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139b84848484611ca5565b505060016000555050565b6000610985826113b461098b565b60065473ffffffffffffffffffffffffffffffffffffffff16611e5c565b805160005b81811015610d02576114018382815181106113f4576113f4613f4c565b6020026020010151611a80565b6001016113d7565b3360009081526001602081905260409091205414611453576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5c81611ebe565b6000546002036114c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161104d565b600260008181553381526020919091526040902054600114611516576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff1615611553576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ec828233611f4c565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b60075460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b336000908152600460205260409020546116b4908290613faa565b3360009081526004602052604090205550565b60008160e001511180156116de5750428160e00151105b15611715576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61171f82826111a6565b6103e88161012001511115611760576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61176d8160800151610b15565b60008281526008602052604090205460ff16156117b6576040517f7b38b76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117f0816020015182610100015173ffffffffffffffffffffffffffffffffffffffff919091166000908152600460205260409020541490565b610ca9576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8183148061183a575082158061183a575081155b15611871576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526005602052604090205415158061189a575060008281526005602052604090205415155b156118d1576040517f3a81d6fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b60008061198e8461205a565b8051906020012090506000856040516020016119c6919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020918201207fff000000000000000000000000000000000000000000000000000000000000008285015260609790971b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021840152603583019690965260558083019490945280518083039094018452607590910190525080519201919091209392505050565b602081015173ffffffffffffffffffffffffffffffffffffffff163314611ad3576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611ade826111fb565b600081815260086020526040902080549192509060ff1615611b2c576040517f7b38b76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b81811015611bd757611bcf858281518110611ba757611ba7613f4c565b6020026020010151858381518110611bc157611bc1613f4c565b602002602001015185611f4c565b600101611b8a565b5050505050565b600080826002811115611bf357611bf3613e6b565b03611c0b57611c04868686866120eb565b9050610fdc565b6002826002811115611c1f57611c1f613e6b565b03611c3057611c0486868686612139565b611c048686868661218d565b6000610985611c496121c1565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080611cb387846122f5565b91509150600080611cc389612342565b91509150611cd78960200151308488612379565b611ce28989886123a3565b611cec84826123f5565b6101208a0151909450600090611d2e90828c61014001516001811115611d1457611d14613e6b565b14611d1f5787611d21565b865b88888e610140015161243d565b9050611d4b308b60200151848489611d469190613fc2565b612379565b611d573033848461252d565b6000611d6284612596565b90508015611d7a57611d7a308c602001518684612379565b60208b8101516040805187815292830186905282018990526060820188905260808201849052309173ffffffffffffffffffffffffffffffffffffffff9091169087907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a46020808c01516040805187815292830186905282018990526060820188905273ffffffffffffffffffffffffffffffffffffffff169086907f63bf4d16b7fa898ef4c4b2b6d90fd201e9c56313b65638af6088d149d2ce956c9060800160405180910390a35050505050505050505050565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b166020820152600090611eb49083908590603401604051602081830303815290604052805190602001206126c6565b90505b9392505050565b60065460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b81600080611f5a86846122f5565b6101208801519193509150600090611fa790825b8961014001516001811115611f8557611f85613e6b565b14611f905785611f92565b845b8960a001518a60c001518b610140015161243d565b9050600080611fb589612342565b91509150611fcf338a60200151838689611d469190613fc2565b611fdf8960200151888489612379565b6020898101516040805185815292830184905282018890526060820187905260808201859052339173ffffffffffffffffffffffffffffffffffffffff9091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a4505050505050505050565b6060604051806101a00160405280610171815260200161419261017191396040805173ffffffffffffffffffffffffffffffffffffffff8516602082015201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526120d59291602001614005565b6040516020818303038152906040529050919050565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561212e575061212e858484612763565b90505b949350505050565b6000612146858484612763565b801561212e57508373ffffffffffffffffffffffffffffffffffffffff1661216d86610ee8565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b600061219a858484612763565b801561212e57508373ffffffffffffffffffffffffffffffffffffffff1661216d866113a6565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561222757507f000000000000000000000000000000000000000000000000000000000000000046145b1561225157507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008061230584606001516127a5565b61230e846111fb565b905061231a81856116c7565b61232d838560a001518660c00151612817565b915061233a81858561283e565b509250929050565b60008080836101400151600181111561235d5761235d613e6b565b0361236d57505060800151600091565b50506080015190600090565b816000036123915761238c8484836128eb565b61239d565b61239d84848484612940565b50505050565b815160005b81811015611bd7576123ed858583815181106123c6576123c6613f4c565b60200260200101518584815181106123e0576123e0613f4c565b602002602001015161296d565b6001016123a8565b60008061240183612596565b905083811015611eb7576040517fdf4d808000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008515610fdc576000612452858585612a52565b905060008111801561246c5750670de0b6b3a76400008111155b1561252357600083600181111561248557612485613e6b565b036124d75761249661271082614034565b866124b2836124ad81670de0b6b3a7640000613fc2565b612ac1565b6124bc908a614034565b6124c69190614034565b6124d09190614071565b9150612523565b6124eb670de0b6b3a7640000612710614034565b86612502836124ad81670de0b6b3a7640000613fc2565b61250c908a614034565b6125169190614034565b6125209190614071565b91505b5095945050505050565b801561239d5761253f84848484612379565b604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff8516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b60008160000361264f576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa15801561262b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098591906140ac565b6040517efdd58e0000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e9060440161260e565b6000806126d38585612ad7565b8051602091820120604080517fff000000000000000000000000000000000000000000000000000000000000008185015260609890981b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021890152603588019590955260558088019190915284518088039091018152607590960190935250508251920191909120919050565b60008373ffffffffffffffffffffffffffffffffffffffff166127868484612c5a565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b73ffffffffffffffffffffffffffffffffffffffff8116158015906127e0575073ffffffffffffffffffffffffffffffffffffffff81163314155b15610b5c576040517f5211a07900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008260000361282957506000611eb7565b826128348386614034565b611eb49190614071565b6000838152600860205260409020600181015490811561285e5781612864565b8360a001515b9150818311156128a0576040517fe2cc6ad600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128aa8383613fc2565b9150816000036128de5780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781555b6001018190559392505050565b7f00000000000000000000000000000000000000000000000000000000000000003073ffffffffffffffffffffffffffffffffffffffff8516036129345761238c818484612c7e565b61239d81858585612c89565b61239d7f000000000000000000000000000000000000000000000000000000000000000085858585612c95565b60006129798484612d41565b9050612986848483612ddd565b8160008061299486846122f5565b61012088015191935091506000906129ac9082611f6e565b90506000806129ba89612342565b915091506129d186868b6020015185858c89612e89565b6020808b01518a820151604080518681529384018590528301899052606083018890526080830186905273ffffffffffffffffffffffffffffffffffffffff9182169291169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a450505050505050505050565b600080826001811115612a6757612a67613e6b565b03612a9f5782600003612a7b576000612a98565b82612a8e670de0b6b3a764000086614034565b612a989190614071565b9050611eb7565b83600003612aae576000611eb4565b83612834670de0b6b3a764000085614034565b6000818310612ad05781611eb7565b5090919050565b6040805160008082526020820190925260609190612af890604481016140c5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f52e831dd000000000000000000000000000000000000000000000000000000001790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe60208201526c010000000000000000000000008502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be60418201526c01000000000000000000000000840260608201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060748201528082604051602001612c41929190614005565b6040516020818303038152906040529250505092915050565b6000806000612c698585612f09565b91509150612c7681612f4e565b509392505050565b610d02838383613101565b61239d848484846131ba565b6040517ff242432a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b158015612d2257600080fd5b505af1158015612d36573d6000803e3d6000fd5b505050505050505050565b6000808361014001516001811115612d5b57612d5b613e6b565b148015612d7e575060008261014001516001811115612d7c57612d7c613e6b565b145b15612d8b57506001610985565b60018361014001516001811115612da457612da4613e6b565b148015612dc7575060018261014001516001811115612dc557612dc5613e6b565b145b15612dd457506002610985565b50600092915050565b612de78383613279565b612e1d576040517f7f9a6f4600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816002811115612e3157612e31613e6b565b03612e77578160800151836080015114610d02576040517fa0b9446500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d02836080015183608001516110f5565b612e958530868a612379565b612ea287878686866132c3565b85612eac84612596565b1015612ee4576040517fdf4d808000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ef4308685611d46858b613fc2565b612f003033858461252d565b50505050505050565b6000808251604103612f3f5760208301516040840151606085015160001a612f338782858561334b565b94509450505050612f47565b506000905060025b9250929050565b6000816004811115612f6257612f62613e6b565b03612f6a5750565b6001816004811115612f7e57612f7e613e6b565b03612fe5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161104d565b6002816004811115612ff957612ff9613e6b565b03613060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161104d565b600381600481111561307457613074613e6b565b03610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161104d565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d116001600051141617169150508061239d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015260640161104d565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080611bd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000604482015260640161104d565b60008260c0015160001480613290575060c0820151155b1561329d57506001610985565b611eb76132a98461343a565b6132b28461343a565b856101400151856101400151613454565b60008160028111156132d7576132d7613e6b565b14611bd75760018160028111156132f0576132f0613e6b565b036133165760008281526005602052604090206001015461331190856134ee565b611bd7565b600281600281111561332a5761332a613e6b565b03611bd757600083815260056020526040902060010154613311908661361e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156133825750600090506003613431565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156133d6573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661342a57600060019250925050613431565b9150600090505b94509492505050565b60006109858260a001518360c00151846101400151612a52565b60008083600181111561346957613469613e6b565b036134ad57600082600181111561348257613482613e6b565b036134a357670de0b6b3a764000061349a8587613faa565b10159050612131565b5082841015612131565b60008260018111156134c1576134c1613e6b565b036134d0575083831015612131565b670de0b6b3a76400006134e38587613faa565b111595945050505050565b60408051600280825260608201835260009260208301908036833701905050905060018160008151811061352457613524613f4c565b60200260200101818152505060028160018151811061354557613545613f4c565b60209081029190910101527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526135f09190600090889087908990600401614116565b600060405180830381600087803b15801561360a57600080fd5b505af1158015612f00573d6000803e3d6000fd5b60408051600280825260608201835260009260208301908036833701905050905060018160008151811061365457613654613f4c565b60200260200101818152505060028160018151811061367557613675613f4c565b60209081029190910101527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639e7212ad7f00000000000000000000000000000000000000000000000000000000000000006135ae565b6000602082840312156136f457600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611eb757600080fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610b5c57600080fd5b803561375181613724565b919050565b6000806040838503121561376957600080fd5b823561377481613724565b946020939093013593505050565b60006020828403121561379457600080fd5b8135611eb781613724565b6000602082840312156137b157600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101a0810167ffffffffffffffff8111828210171561380b5761380b6137b8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613858576138586137b8565b604052919050565b80356002811061375157600080fd5b80356003811061375157600080fd5b600082601f83011261388f57600080fd5b813567ffffffffffffffff8111156138a9576138a96137b8565b6138da60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613811565b8181528460208386010111156138ef57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a0828403121561391f57600080fd5b6139276137e7565b90508135815261393960208301613746565b602082015261394a60408301613746565b604082015261395b60608301613746565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101406139ae818401613860565b908201526101606139c083820161386f565b908201526101808281013567ffffffffffffffff8111156139e057600080fd5b6139ec8582860161387e565b82840152505092915050565b600060208284031215613a0a57600080fd5b813567ffffffffffffffff811115613a2157600080fd5b6121318482850161390c565b600080600060608486031215613a4257600080fd5b505081359360208301359350604090920135919050565b600067ffffffffffffffff821115613a7357613a736137b8565b5060051b60200190565b600082601f830112613a8e57600080fd5b81356020613aa3613a9e83613a59565b613811565b82815260059290921b84018101918181019086841115613ac257600080fd5b8286015b84811015613add5780358352918301918301613ac6565b509695505050505050565b600080600080600060a08688031215613b0057600080fd5b8535613b0b81613724565b94506020860135613b1b81613724565b9350604086013567ffffffffffffffff80821115613b3857600080fd5b613b4489838a01613a7d565b94506060880135915080821115613b5a57600080fd5b613b6689838a01613a7d565b93506080880135915080821115613b7c57600080fd5b50613b898882890161387e565b9150509295509295909350565b600082601f830112613ba757600080fd5b81356020613bb7613a9e83613a59565b82815260059290921b84018101918181019086841115613bd657600080fd5b8286015b84811015613add57803567ffffffffffffffff811115613bfa5760008081fd5b613c088986838b010161390c565b845250918301918301613bda565b60008060408385031215613c2957600080fd5b823567ffffffffffffffff80821115613c4157600080fd5b613c4d86838701613b96565b93506020850135915080821115613c6357600080fd5b50613c7085828601613a7d565b9150509250929050565b60008060408385031215613c8d57600080fd5b50508035926020909101359150565b60008060408385031215613caf57600080fd5b82359150602083013567ffffffffffffffff811115613ccd57600080fd5b613c708582860161390c565b60008060008060808587031215613cef57600080fd5b843567ffffffffffffffff80821115613d0757600080fd5b613d138883890161390c565b95506020870135915080821115613d2957600080fd5b613d3588838901613b96565b9450604087013593506060870135915080821115613d5257600080fd5b50613d5f87828801613a7d565b91505092959194509250565b600080600080600060a08688031215613d8357600080fd5b8535613d8e81613724565b94506020860135613d9e81613724565b93506040860135925060608601359150608086013567ffffffffffffffff811115613dc857600080fd5b613b898882890161387e565b600060208284031215613de657600080fd5b813567ffffffffffffffff811115613dfd57600080fd5b61213184828501613b96565b60008060408385031215613e1c57600080fd5b823567ffffffffffffffff811115613e3357600080fd5b613e3f8582860161390c565b95602094909401359450505050565b600060208284031215613e6057600080fd5b8151611eb781613724565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110613eaa57613eaa613e6b565b9052565b60006101a0820190508e82528d602083015273ffffffffffffffffffffffffffffffffffffffff808e166040840152808d166060840152808c166080840152508960a08301528860c08301528760e083015286610100830152856101208301528461014083015260028410613f2557613f25613e6b565b83610160830152613f3a610180830184613e9a565b9e9d5050505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115613fbd57613fbd613f7b565b500190565b600082821015613fd457613fd4613f7b565b500390565b60005b83811015613ff4578181015183820152602001613fdc565b8381111561239d5750506000910152565b60008351614017818460208801613fd9565b83519083019061402b818360208801613fd9565b01949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561406c5761406c613f7b565b500290565b6000826140a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000602082840312156140be57600080fd5b5051919050565b60208152600082518060208401526140e4816040850160208701613fd9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060a0820173ffffffffffffffffffffffffffffffffffffffff881683526020878185015286604085015260a0606085015281865180845260c086019150828801935060005b818110156141795784518352938301939183019160010161415d565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a264697066735822122056df26e165b5957191bd0ff149c07ae13f5a6b4252973fb3c07a4653cce0f3b164736f6c634300080f00330000000000000000000000002e8dcfe708d44ae2e406a1c02dfe2fa13012f9610000000000000000000000007d8610e9567d2a6c9fbf66a5a13e9ba8bb120d43000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x1107c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x10169\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x7d00\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x7d34\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [],\n  \"libraries\": [],\n  \"pending\": [\n    \"0x4cf5ff4362abb630398f45b0ed26787e7b2524c53c4cc006641764f5f8267609\"\n  ],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/80001/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\"\n    }\n  },\n  \"timestamp\": 1664228139,\n  \"commit\": \"af3ba7f\"\n}"
  },
  {
    "path": "broadcast/ExchangeDeployment.s.sol/80001/deployExchange-latest.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": \"0x4cf5ff4362abb630398f45b0ed26787e7b2524c53c4cc006641764f5f8267609\",\n      \"transactionType\": \"CREATE\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": null,\n      \"arguments\": [\n        \"0x2E8DCfE708D44ae2e406a1c02DFE2Fa13012f961\",\n        \"0x7D8610E9567d2a6C9FBf66a5A13E9Ba8bb120d43\",\n        \"0xaB45c5A4B0c941a2F231C04C3f49182e1A254052\",\n        \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"gas\": \"0x4d4c99\",\n        \"value\": \"0x0\",\n        \"data\": \"0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b506040516200473f3803806200473f8339810160408190526200004491620002d6565b604080518082018252601781527f506f6c796d61726b6574204354462045786368616e67650000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516143386200040760003960006108970152600081816104c801528181612698015281816129450152818161355201526136820152600081816105eb015281816125e3015281816128ed0152818161358e01526136be01526000612258015260006122a701526000612282015260006121db015260006122050152600061222f01526143386000f3fe608060405234801561001057600080fd5b50600436106103365760003560e01c806370480275116101b2578063d798eff6116100f9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610892578063fa950b48146108b9578063fbddd751146108cc578063fe729aaf146108df57600080fd5b8063e60f0c0514610834578063edef7d8e14610847578063f23a6e611461085a57600080fd5b8063e03ac3d0116100d3578063e03ac3d014610806578063e2eec4051461080e578063e50e4f971461082157600080fd5b8063d798eff6146107bd578063d7fb272f146107d0578063d82da838146107f357600080fd5b8063a287bdf11161015b578063b28c51c011610135578063b28c51c01461073b578063bc197c8114610759578063c10f1a751461079d57600080fd5b8063a287bdf114610702578063a6dfcf8614610715578063ac8a584a1461072857600080fd5b806383b8a5ae1161018c57806383b8a5ae146106d45780639870d7fe146106dc578063a10f3dce146106ef57600080fd5b8063704802751461068357806375d7370a146106965780637ecebe00146106b457600080fd5b8063429b62e5116102815780635893253c1161022a578063627cdcb911610204578063627cdcb91461061c578063654f0ce41461062457806368c7450f146106375780636d70f7ae1461064a57600080fd5b80635893253c146105ad5780635c1548fb146105e95780635c975abb1461060f57600080fd5b8063456068d21161025b578063456068d21461052f57806346423aa7146105375780634a2a11f5146105a557600080fd5b8063429b62e5146104f457806344bea37e146105145780634544f0551461051c57600080fd5b80631785f53c116102e357806334600901116102bd57806334600901146104b35780633b521d78146104c65780633d6d3598146104ec57600080fd5b80631785f53c1461042257806324d7806c146104355780632dff692d1461046f57600080fd5b80631031e36e116103145780631031e36e146103ca578063131e7e1c146103d457806313e7c9d8146103f457600080fd5b806301ffc9a71461033b5780630647ee201461036357806306b9d6911461039d575b600080fd5b61034e6103493660046136e2565b6108f2565b60405190151581526020015b60405180910390f35b61034e610371366004613756565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600460205260409020541490565b6103a561098b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161035a565b6103d2610a24565b005b6007546103a59073ffffffffffffffffffffffffffffffffffffffff1681565b610414610402366004613782565b60026020526000908152604090205481565b60405190815260200161035a565b6103d2610430366004613782565b610a78565b61034e610443366004613782565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160208190526040909120541490565b61049c61047d36600461379f565b6008602052600090815260409020805460019091015460ff9091169082565b60408051921515835260208301919091520161035a565b6103d26104c136600461379f565b610b15565b7f00000000000000000000000000000000000000000000000000000000000000006103a5565b6103d2610b5f565b610414610502366004613782565b60016020526000908152604090205481565b610414600081565b6103d261052a366004613782565b610be3565b6103d2610c36565b61058861054536600461379f565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b60408051825115158152602092830151928101929092520161035a565b6103e8610414565b6105d46105bb36600461379f565b6005602052600090815260409020805460019091015482565b6040805192835260208301919091520161035a565b7f00000000000000000000000000000000000000000000000000000000000000006103a5565b60035461034e9060ff1681565b6103d2610c88565b6103d26106323660046139f8565b610c92565b6103d2610645366004613a2d565b610cad565b61034e610658366004613782565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460011490565b6103d2610691366004613782565b610d07565b60075473ffffffffffffffffffffffffffffffffffffffff166103a5565b6104146106c2366004613782565b60046020526000908152604090205481565b6103d2610da7565b6103d26106ea366004613782565b610e2c565b6104146106fd36600461379f565b610eca565b6103a5610710366004613782565b610ee8565b6103d26107233660046139f8565b610f14565b6103d2610736366004613782565b610f1d565b60065473ffffffffffffffffffffffffffffffffffffffff166103a5565b61076c610767366004613ae8565b610fba565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161035a565b6006546103a59073ffffffffffffffffffffffffffffffffffffffff1681565b6103d26107cb366004613c16565b610fe5565b6104146107de36600461379f565b60009081526005602052604090206001015490565b6103d2610801366004613c7a565b6110f5565b6103a5611136565b6103d261081c366004613c9c565b6111a6565b61041461082f3660046139f8565b6111fb565b6103d2610842366004613cd9565b611298565b6103a5610855366004613782565b6113a6565b61076c610868366004613d6b565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b6104147f000000000000000000000000000000000000000000000000000000000000000081565b6103d26108c7366004613dd4565b6113d2565b6103d26108da366004613782565b611409565b6103d26108ed366004613e09565b61145c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000148061098557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600654604080517faaf10f42000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163aaf10f429160048083019260209291908290030181865afa1580156109fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1f9190613e4e565b905090565b3360009081526001602081905260409091205414610a6e576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a7661155e565b565b3360009081526001602081905260409091205414610ac2576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610b5c576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b33600090815260026020526040902054600114610ba8576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610c2d576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5c816115b6565b3360009081526001602081905260409091205414610c80576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a76611644565b610a766001611699565b6000610c9d826111fb565b9050610ca981836116c7565b5050565b3360009081526001602081905260409091205414610cf7576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d02838383611826565b505050565b3360009081526001602081905260409091205414610d51576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610df1576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610e76576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610ed582610b15565b5060009081526005602052604090205490565b600061098582610ef6611136565b60075473ffffffffffffffffffffffffffffffffffffffff16611982565b610b5c81611a80565b3360009081526001602081905260409091205414610f67576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b7fbc197c81000000000000000000000000000000000000000000000000000000005b95945050505050565b600054600203611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6002600081815533815260209190915260409020546001146110a4576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff16156110e1576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ec828233611b85565b50506001600055565b806110ff83610eca565b14610ca9576040517f66f8620a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600754604080517fa619486e000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163a619486e9160048083019260209291908290030181865afa1580156109fb573d6000803e3d6000fd5b6111c58160400151826020015184846101800151856101600151611bde565b610ca9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109857fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e610160015160405160200161127d9d9c9b9a99989796959493929190613eae565b60405160208183030381529060405280519060200120611c3c565b600054600203611304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161104d565b600260008181553381526020919091526040902054600114611352576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff161561138f576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139b84848484611ca5565b505060016000555050565b6000610985826113b461098b565b60065473ffffffffffffffffffffffffffffffffffffffff16611e5c565b805160005b81811015610d02576114018382815181106113f4576113f4613f4c565b6020026020010151611a80565b6001016113d7565b3360009081526001602081905260409091205414611453576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5c81611ebe565b6000546002036114c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161104d565b600260008181553381526020919091526040902054600114611516576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff1615611553576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ec828233611f4c565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b60075460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b336000908152600460205260409020546116b4908290613faa565b3360009081526004602052604090205550565b60008160e001511180156116de5750428160e00151105b15611715576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61171f82826111a6565b6103e88161012001511115611760576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61176d8160800151610b15565b60008281526008602052604090205460ff16156117b6576040517f7b38b76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117f0816020015182610100015173ffffffffffffffffffffffffffffffffffffffff919091166000908152600460205260409020541490565b610ca9576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8183148061183a575082158061183a575081155b15611871576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526005602052604090205415158061189a575060008281526005602052604090205415155b156118d1576040517f3a81d6fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b60008061198e8461205a565b8051906020012090506000856040516020016119c6919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020918201207fff000000000000000000000000000000000000000000000000000000000000008285015260609790971b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021840152603583019690965260558083019490945280518083039094018452607590910190525080519201919091209392505050565b602081015173ffffffffffffffffffffffffffffffffffffffff163314611ad3576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611ade826111fb565b600081815260086020526040902080549192509060ff1615611b2c576040517f7b38b76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b81811015611bd757611bcf858281518110611ba757611ba7613f4c565b6020026020010151858381518110611bc157611bc1613f4c565b602002602001015185611f4c565b600101611b8a565b5050505050565b600080826002811115611bf357611bf3613e6b565b03611c0b57611c04868686866120eb565b9050610fdc565b6002826002811115611c1f57611c1f613e6b565b03611c3057611c0486868686612139565b611c048686868661218d565b6000610985611c496121c1565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b81600080611cb387846122f5565b91509150600080611cc389612342565b91509150611cd78960200151308488612379565b611ce28989886123a3565b611cec84826123f5565b6101208a0151909450600090611d2e90828c61014001516001811115611d1457611d14613e6b565b14611d1f5787611d21565b865b88888e610140015161243d565b9050611d4b308b60200151848489611d469190613fc2565b612379565b611d573033848461252d565b6000611d6284612596565b90508015611d7a57611d7a308c602001518684612379565b60208b8101516040805187815292830186905282018990526060820188905260808201849052309173ffffffffffffffffffffffffffffffffffffffff9091169087907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a46020808c01516040805187815292830186905282018990526060820188905273ffffffffffffffffffffffffffffffffffffffff169086907f63bf4d16b7fa898ef4c4b2b6d90fd201e9c56313b65638af6088d149d2ce956c9060800160405180910390a35050505050505050505050565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b166020820152600090611eb49083908590603401604051602081830303815290604052805190602001206126c6565b90505b9392505050565b60065460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b81600080611f5a86846122f5565b6101208801519193509150600090611fa790825b8961014001516001811115611f8557611f85613e6b565b14611f905785611f92565b845b8960a001518a60c001518b610140015161243d565b9050600080611fb589612342565b91509150611fcf338a60200151838689611d469190613fc2565b611fdf8960200151888489612379565b6020898101516040805185815292830184905282018890526060820187905260808201859052339173ffffffffffffffffffffffffffffffffffffffff9091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a4505050505050505050565b6060604051806101a00160405280610171815260200161419261017191396040805173ffffffffffffffffffffffffffffffffffffffff8516602082015201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526120d59291602001614005565b6040516020818303038152906040529050919050565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561212e575061212e858484612763565b90505b949350505050565b6000612146858484612763565b801561212e57508373ffffffffffffffffffffffffffffffffffffffff1661216d86610ee8565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b600061219a858484612763565b801561212e57508373ffffffffffffffffffffffffffffffffffffffff1661216d866113a6565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561222757507f000000000000000000000000000000000000000000000000000000000000000046145b1561225157507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008061230584606001516127a5565b61230e846111fb565b905061231a81856116c7565b61232d838560a001518660c00151612817565b915061233a81858561283e565b509250929050565b60008080836101400151600181111561235d5761235d613e6b565b0361236d57505060800151600091565b50506080015190600090565b816000036123915761238c8484836128eb565b61239d565b61239d84848484612940565b50505050565b815160005b81811015611bd7576123ed858583815181106123c6576123c6613f4c565b60200260200101518584815181106123e0576123e0613f4c565b602002602001015161296d565b6001016123a8565b60008061240183612596565b905083811015611eb7576040517fdf4d808000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008515610fdc576000612452858585612a52565b905060008111801561246c5750670de0b6b3a76400008111155b1561252357600083600181111561248557612485613e6b565b036124d75761249661271082614034565b866124b2836124ad81670de0b6b3a7640000613fc2565b612ac1565b6124bc908a614034565b6124c69190614034565b6124d09190614071565b9150612523565b6124eb670de0b6b3a7640000612710614034565b86612502836124ad81670de0b6b3a7640000613fc2565b61250c908a614034565b6125169190614034565b6125209190614071565b91505b5095945050505050565b801561239d5761253f84848484612379565b604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff8516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b60008160000361264f576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa15801561262b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098591906140ac565b6040517efdd58e0000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e9060440161260e565b6000806126d38585612ad7565b8051602091820120604080517fff000000000000000000000000000000000000000000000000000000000000008185015260609890981b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021890152603588019590955260558088019190915284518088039091018152607590960190935250508251920191909120919050565b60008373ffffffffffffffffffffffffffffffffffffffff166127868484612c5a565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b73ffffffffffffffffffffffffffffffffffffffff8116158015906127e0575073ffffffffffffffffffffffffffffffffffffffff81163314155b15610b5c576040517f5211a07900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008260000361282957506000611eb7565b826128348386614034565b611eb49190614071565b6000838152600860205260409020600181015490811561285e5781612864565b8360a001515b9150818311156128a0576040517fe2cc6ad600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128aa8383613fc2565b9150816000036128de5780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781555b6001018190559392505050565b7f00000000000000000000000000000000000000000000000000000000000000003073ffffffffffffffffffffffffffffffffffffffff8516036129345761238c818484612c7e565b61239d81858585612c89565b61239d7f000000000000000000000000000000000000000000000000000000000000000085858585612c95565b60006129798484612d41565b9050612986848483612ddd565b8160008061299486846122f5565b61012088015191935091506000906129ac9082611f6e565b90506000806129ba89612342565b915091506129d186868b6020015185858c89612e89565b6020808b01518a820151604080518681529384018590528301899052606083018890526080830186905273ffffffffffffffffffffffffffffffffffffffff9182169291169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a450505050505050505050565b600080826001811115612a6757612a67613e6b565b03612a9f5782600003612a7b576000612a98565b82612a8e670de0b6b3a764000086614034565b612a989190614071565b9050611eb7565b83600003612aae576000611eb4565b83612834670de0b6b3a764000085614034565b6000818310612ad05781611eb7565b5090919050565b6040805160008082526020820190925260609190612af890604481016140c5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f52e831dd000000000000000000000000000000000000000000000000000000001790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe60208201526c010000000000000000000000008502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be60418201526c01000000000000000000000000840260608201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060748201528082604051602001612c41929190614005565b6040516020818303038152906040529250505092915050565b6000806000612c698585612f09565b91509150612c7681612f4e565b509392505050565b610d02838383613101565b61239d848484846131ba565b6040517ff242432a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b158015612d2257600080fd5b505af1158015612d36573d6000803e3d6000fd5b505050505050505050565b6000808361014001516001811115612d5b57612d5b613e6b565b148015612d7e575060008261014001516001811115612d7c57612d7c613e6b565b145b15612d8b57506001610985565b60018361014001516001811115612da457612da4613e6b565b148015612dc7575060018261014001516001811115612dc557612dc5613e6b565b145b15612dd457506002610985565b50600092915050565b612de78383613279565b612e1d576040517f7f9a6f4600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816002811115612e3157612e31613e6b565b03612e77578160800151836080015114610d02576040517fa0b9446500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d02836080015183608001516110f5565b612e958530868a612379565b612ea287878686866132c3565b85612eac84612596565b1015612ee4576040517fdf4d808000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ef4308685611d46858b613fc2565b612f003033858461252d565b50505050505050565b6000808251604103612f3f5760208301516040840151606085015160001a612f338782858561334b565b94509450505050612f47565b506000905060025b9250929050565b6000816004811115612f6257612f62613e6b565b03612f6a5750565b6001816004811115612f7e57612f7e613e6b565b03612fe5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161104d565b6002816004811115612ff957612ff9613e6b565b03613060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161104d565b600381600481111561307457613074613e6b565b03610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161104d565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d116001600051141617169150508061239d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015260640161104d565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080611bd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000604482015260640161104d565b60008260c0015160001480613290575060c0820151155b1561329d57506001610985565b611eb76132a98461343a565b6132b28461343a565b856101400151856101400151613454565b60008160028111156132d7576132d7613e6b565b14611bd75760018160028111156132f0576132f0613e6b565b036133165760008281526005602052604090206001015461331190856134ee565b611bd7565b600281600281111561332a5761332a613e6b565b03611bd757600083815260056020526040902060010154613311908661361e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156133825750600090506003613431565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156133d6573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661342a57600060019250925050613431565b9150600090505b94509492505050565b60006109858260a001518360c00151846101400151612a52565b60008083600181111561346957613469613e6b565b036134ad57600082600181111561348257613482613e6b565b036134a357670de0b6b3a764000061349a8587613faa565b10159050612131565b5082841015612131565b60008260018111156134c1576134c1613e6b565b036134d0575083831015612131565b670de0b6b3a76400006134e38587613faa565b111595945050505050565b60408051600280825260608201835260009260208301908036833701905050905060018160008151811061352457613524613f4c565b60200260200101818152505060028160018151811061354557613545613f4c565b60209081029190910101527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526135f09190600090889087908990600401614116565b600060405180830381600087803b15801561360a57600080fd5b505af1158015612f00573d6000803e3d6000fd5b60408051600280825260608201835260009260208301908036833701905050905060018160008151811061365457613654613f4c565b60200260200101818152505060028160018151811061367557613675613f4c565b60209081029190910101527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639e7212ad7f00000000000000000000000000000000000000000000000000000000000000006135ae565b6000602082840312156136f457600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611eb757600080fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610b5c57600080fd5b803561375181613724565b919050565b6000806040838503121561376957600080fd5b823561377481613724565b946020939093013593505050565b60006020828403121561379457600080fd5b8135611eb781613724565b6000602082840312156137b157600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101a0810167ffffffffffffffff8111828210171561380b5761380b6137b8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613858576138586137b8565b604052919050565b80356002811061375157600080fd5b80356003811061375157600080fd5b600082601f83011261388f57600080fd5b813567ffffffffffffffff8111156138a9576138a96137b8565b6138da60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613811565b8181528460208386010111156138ef57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a0828403121561391f57600080fd5b6139276137e7565b90508135815261393960208301613746565b602082015261394a60408301613746565b604082015261395b60608301613746565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101406139ae818401613860565b908201526101606139c083820161386f565b908201526101808281013567ffffffffffffffff8111156139e057600080fd5b6139ec8582860161387e565b82840152505092915050565b600060208284031215613a0a57600080fd5b813567ffffffffffffffff811115613a2157600080fd5b6121318482850161390c565b600080600060608486031215613a4257600080fd5b505081359360208301359350604090920135919050565b600067ffffffffffffffff821115613a7357613a736137b8565b5060051b60200190565b600082601f830112613a8e57600080fd5b81356020613aa3613a9e83613a59565b613811565b82815260059290921b84018101918181019086841115613ac257600080fd5b8286015b84811015613add5780358352918301918301613ac6565b509695505050505050565b600080600080600060a08688031215613b0057600080fd5b8535613b0b81613724565b94506020860135613b1b81613724565b9350604086013567ffffffffffffffff80821115613b3857600080fd5b613b4489838a01613a7d565b94506060880135915080821115613b5a57600080fd5b613b6689838a01613a7d565b93506080880135915080821115613b7c57600080fd5b50613b898882890161387e565b9150509295509295909350565b600082601f830112613ba757600080fd5b81356020613bb7613a9e83613a59565b82815260059290921b84018101918181019086841115613bd657600080fd5b8286015b84811015613add57803567ffffffffffffffff811115613bfa5760008081fd5b613c088986838b010161390c565b845250918301918301613bda565b60008060408385031215613c2957600080fd5b823567ffffffffffffffff80821115613c4157600080fd5b613c4d86838701613b96565b93506020850135915080821115613c6357600080fd5b50613c7085828601613a7d565b9150509250929050565b60008060408385031215613c8d57600080fd5b50508035926020909101359150565b60008060408385031215613caf57600080fd5b82359150602083013567ffffffffffffffff811115613ccd57600080fd5b613c708582860161390c565b60008060008060808587031215613cef57600080fd5b843567ffffffffffffffff80821115613d0757600080fd5b613d138883890161390c565b95506020870135915080821115613d2957600080fd5b613d3588838901613b96565b9450604087013593506060870135915080821115613d5257600080fd5b50613d5f87828801613a7d565b91505092959194509250565b600080600080600060a08688031215613d8357600080fd5b8535613d8e81613724565b94506020860135613d9e81613724565b93506040860135925060608601359150608086013567ffffffffffffffff811115613dc857600080fd5b613b898882890161387e565b600060208284031215613de657600080fd5b813567ffffffffffffffff811115613dfd57600080fd5b61213184828501613b96565b60008060408385031215613e1c57600080fd5b823567ffffffffffffffff811115613e3357600080fd5b613e3f8582860161390c565b95602094909401359450505050565b600060208284031215613e6057600080fd5b8151611eb781613724565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110613eaa57613eaa613e6b565b9052565b60006101a0820190508e82528d602083015273ffffffffffffffffffffffffffffffffffffffff808e166040840152808d166060840152808c166080840152508960a08301528860c08301528760e083015286610100830152856101208301528461014083015260028410613f2557613f25613e6b565b83610160830152613f3a610180830184613e9a565b9e9d5050505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115613fbd57613fbd613f7b565b500190565b600082821015613fd457613fd4613f7b565b500390565b60005b83811015613ff4578181015183820152602001613fdc565b8381111561239d5750506000910152565b60008351614017818460208801613fd9565b83519083019061402b818360208801613fd9565b01949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561406c5761406c613f7b565b500290565b6000826140a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000602082840312156140be57600080fd5b5051919050565b60208152600082518060208401526140e4816040850160208701613fd9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060a0820173ffffffffffffffffffffffffffffffffffffffff881683526020878185015286604085015260a0606085015281865180845260c086019150828801935060005b818110156141795784518352938301939183019160010161415d565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033a264697066735822122056df26e165b5957191bd0ff149c07ae13f5a6b4252973fb3c07a4653cce0f3b164736f6c634300080f00330000000000000000000000002e8dcfe708d44ae2e406a1c02dfe2fa13012f9610000000000000000000000007d8610e9567d2a6c9fbf66a5a13e9ba8bb120d43000000000000000000000000ab45c5a4b0c941a2f231c04c3f49182e1a254052000000000000000000000000aacfeea03eb1561c4e67d661e40682bd20e3541b\",\n        \"nonce\": \"0x0\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"addAdmin(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x1107c\",\n        \"value\": \"0x0\",\n        \"data\": \"0x70480275000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x1\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"addOperator(address)\",\n      \"arguments\": [\n        \"0x665057d2bDc8F83722435712a98747EE4A7B8aEb\"\n      ],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x10169\",\n        \"value\": \"0x0\",\n        \"data\": \"0x9870d7fe000000000000000000000000665057d2bdc8f83722435712a98747ee4a7b8aeb\",\n        \"nonce\": \"0x2\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"renounceAdminRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x7d00\",\n        \"value\": \"0x0\",\n        \"data\": \"0x83b8a5ae\",\n        \"nonce\": \"0x3\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    },\n    {\n      \"hash\": null,\n      \"transactionType\": \"CALL\",\n      \"contractName\": \"CTFExchange\",\n      \"contractAddress\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\",\n      \"function\": \"renounceOperatorRole()\",\n      \"arguments\": [],\n      \"transaction\": {\n        \"type\": \"0x02\",\n        \"from\": \"0x81fd0e5e7372ed171f421a7c33a4b263ea9dcc25\",\n        \"to\": \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n        \"gas\": \"0x7d34\",\n        \"value\": \"0x0\",\n        \"data\": \"0x3d6d3598\",\n        \"nonce\": \"0x4\",\n        \"accessList\": []\n      },\n      \"additionalContracts\": []\n    }\n  ],\n  \"receipts\": [],\n  \"libraries\": [],\n  \"pending\": [\n    \"0x4cf5ff4362abb630398f45b0ed26787e7b2524c53c4cc006641764f5f8267609\"\n  ],\n  \"path\": \"/home/jonathan/WorkSpace/polymarket/ctf-exchange/broadcast/ExchangeDeployment.s.sol/80001/deployExchange-latest.json\",\n  \"returns\": {\n    \"exchange\": {\n      \"internal_type\": \"address\",\n      \"value\": \"0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E\"\n    }\n  },\n  \"timestamp\": 1664228139,\n  \"commit\": \"af3ba7f\"\n}"
  },
  {
    "path": "deploy/scripts/deploy_exchange.sh",
    "content": "#!/usr/bin/env bash\n\nLOCAL=.env.local\nTESTNET=.env.testnet\nMAINNET=.env\n\nif [ -z $1 ]\nthen\n  echo \"usage: deploy_exchange.sh [local || testnet || mainnet]\"\n  exit 1\nelif [ $1 == \"local\" ]\nthen\n  ENV=$LOCAL\nelif [ $1 == \"testnet\" ]\nthen\n  ENV=$TESTNET\nelif [ $1 == \"mainnet\" ]\nthen\n  ENV=$MAINNET\nelse\n  echo \"usage: deploy_exchange.sh [local || testnet || mainnet]\"\n  exit 1\nfi\n\nsource $ENV\n\necho \"Deploying CTF Exchange...\"\n\necho \"Deploy args:\nAdmin: $ADMIN\nCollateral: $COLLATERAL\nConditionalTokensFramework: $CTF\nProxyFactory: $PROXY_FACTORY\nSafeFactory: $SAFE_FACTORY\n\"\n\nOUTPUT=\"$(forge script ExchangeDeployment \\\n    --private-key $PK \\\n    --rpc-url $RPC_URL \\\n    --json \\\n    --broadcast \\\n    --with-gas-price 200000000000 \\\n    -s \"deployExchange(address,address,address,address,address)\" $ADMIN $COLLATERAL $CTF $PROXY_FACTORY $SAFE_FACTORY)\"\n\nEXCHANGE=$(echo \"$OUTPUT\" | grep \"{\" | jq -r .returns.exchange.value)\necho \"Exchange deployed: $EXCHANGE\"\n\necho \"Complete!\"\n"
  },
  {
    "path": "docs/CTFExchange.md",
    "content": "# CTFExchange\n\n`CTFExchange` is the core binary limit order exchange contract. It inherits from various library and mixin functions and provides a concise definition of entry points. \n___\n\n\n## `constructor`\n\nInitializes the abstract contracts it inherits from including `Asset` `Signatures` and `Fees`.\n\nParameters:\n\n```java\naddress _collateral // ERC20 collateral asset (USDC)\naddress _ctf //  ERC1155 outcome tokens contract (gnosis conditional tokens framework)\naddress _proxyFactory // Polymarket proxy factory\naddress _safeFactory // Gnosis safe factory contract \naddress _feeReceiver // account to accumulate feed to \n```\n\n## `pauseTrading`\n\nAllows admin to pause trading. \n\nRequirements:\n\n- caller is `admin` (`onlyAdmin`)\n\n## `unpauseTrading`\n\nAllows admin to unpause trading. \n\nRequirements:\n\ncaller is `admin` (`onlyAdmin`)\n\n## `fillOrder`\n\nFills the fill amount of an order with `msg.sender` as the taker\n\nParameters:\n\n```java\nOrder order // The order to be filled\nuint256 fillAmount // The amount to be filled, always in terms of the maker amount\n```\n\nRequirements:\n\n- caller is `operator` (`onlyOperator`)\n- trading is not `paused` (`notPaused`)\n- function is being called for first time in control flow or the previous function call has resolved (`nonReentrant`)\n\n\n## `fillOrders`\n\nFills an array of orders for the corresponding fill amounts with `msg.sender` as the taker\n\nParameters:\n\n```java\nOrder[] orders // The order to be filled\nuint256[] fillAmounts // The amounts to be filled, always in terms of the maker amount\n```\n\nRequirements:\n\n- caller is `operator` (`onlyOperator`)\n- trading is not `paused` (`notPaused`)\n- function is being called for first time in control flow or the previous function call has resolved (`nonReentrant`)\n\n## `matchOrders`\n\nMatches a taker order against an array of maker orders for the specified amounts. \n\nParameters:\n\n```java\nOrder takerOrder // The active order to be matched\nOrder[] makerOrders // The array of maker orders to be matched against the active order\nuint256 takerFillAmount // The amount to fill on the taker order, always in terms of the maker amount\nuint256[] makerFillAmounts // The array of amounts to fill on the maker orders, always in terms of the maker amount\n```\n\nRequirements:\n\n- caller is `operator` (`onlyOperator`)\n- trading is not `paused` (`notPaused`)\n- function is being called for first time in control flow or the previous function call has resolved (`nonReentrant`)\n\n## `setFeeReceiver`\n\nSets `feeReceiver` to new address. \n\nParameters:\n\n```java\naddress _feeReceiver // The new fee receiver address\n```\n\nRequirements:\n\n- caller is `admin` (`onlyAdmin`)\n\n\n## `setProxyFactory`\n\nSets `proxyFactory` to new Polymarket proxy wallet factory address. \n\nParameters:\n\n```java\naddress _newProxyFactory // The new Proxy Wallet factory\n```\n\nRequirements:\n\n- caller is `admin` (`onlyAdmin`)\n\n## `setSafeFactory`\n\nSets `safeFactory` to new gnosis safe factory address.\n\nParameters:\n\n```java\naddress _newSafeFactory // The new Safe wallet factory\n```\nRequirements:\n\n- caller is `admin` (`onlyAdmin`)\n\n\n## `registerToken`\n\nRegisters a tokenId, its complement and its conditionId for trading.\n\nParameters:\n\n```java\nuint256 token // The ERC1155 (ctf) tokenId being registered\nuint256 complement // The ERC1155 (ctf) token ID of the complement of token\nbytes32 // The corresponding CTF conditionId\n```\nRequirements:\n\n- caller is `admin` (`onlyAdmin`)"
  },
  {
    "path": "docs/Overview.md",
    "content": "# Exchange \n\n## Overview\n\nThe `CTFExchange` contract facilitates atomic swaps between binary outcome tokens (ERC1155) and the collateral asset (ERC20). It is intended to be used in a hybrid-decentralized exchange model wherein there is an operator that provides matching/ordering/execution services while settlement happens on-chain,non-custodially according to instructions in the form of signed order messages. The CTF exchange allows for matching operations that include a mint/merge operation which allows orders for complementary outcome tokens to be crossed. Orders are represented as signed typed structured data (EIP712). Additionally, the CTFExchange implements symmetric fees. When orders are matched, one side is considered the maker and the other side is considered the taker. The relationship is always either one to one or many to one (maker to taker) and any price improvement is captured by the taking agent. \n\n## Matching Scenarios \n\n### Assets\n\n* **`A`** - ERC1155 outcome token\n* **`A'`** - ERC1155 outcome token, complement of **`A`**.*\n* **`C`** - ERC20 collateral token. \n\n\n*\\* Complements assumes 1 outcome token and 1 of its complement can always be merged into 1 unit of collateral and 1 unit of collateral can always be split into 1 outcome token and 1 of its complement (ie **`A`** + **`A'`** = **`C`**). Also assume that outcome tokens and collateral have the same decimals/base unit. Finally, the following examples assume **`C`** is USDC for pricing.*\n\n### Scenario 1 - `NORMAL`\n\n#### Maker Order\n\n- **UserA** BUY **100** token **`A`** @ **$0.50**\n\n*(pseudo variables)*\n```json\n{\n  \"maker\": \"userA\",\n  \"makerAsset\": \"C\",\n  \"takerAsset\": \"A\",\n  \"makerAmount\": 50,\n  \"takerAmount\": 100\n}\n```\n\n#### Taker Order\n\n- **UserB** SELL **50** token **`A`** @ **$0.50**\n\n*(pseudo variables)*\n```json\n{\n  \"maker\": \"userB\",\n  \"makerAsset\": \"A\",\n  \"takerAsset\": \"C\",\n  \"makerAmount\": 50,\n  \"takerAmount\": 25\n}\n```\n\n#### Match Operation Overview\n\n`matchOrders(makerOrder, [takerOrder], 50, [25])`\n\n1. Transfer **50** token **`A`** from **userB** into `CTFExchange`\n2. Transfer **25** **`C`** from **userA** into `CTFExchange`\n3. Transfer **50** token **`A`** from `CTFExchange` to **userA**\n4. Transfer **25** **`C`** from `CTFExchange` to **userB**\n\n### Scenario 2 - `MINT`\n\n#### Maker Order\n\n- **UserA** BUY **100** token **`A`** @ **$0.50**\n\n*(pseudo variables)*\n```json\n{\n  \"maker\": \"userA\",\n  \"makerAsset\": \"C\",\n  \"takerAsset\": \"A\",\n  \"makerAmount\": 50,\n  \"takerAmount\": 100\n}\n```\n\n#### Taker Order\n\n- **UserB** BUY **50** token **`A'`** @ **$0.50**\n\n*(pseudo variables)*\n```json\n{\n  \"maker\": \"userB\",\n  \"makerAsset\": \"C\",\n  \"takerAsset\": \"A''\",\n  \"makerAmount\": 25,\n  \"takerAmount\": 50\n}\n```\n\n#### Match Operation Overview\n\n`matchOrders(makerOrder, [takerOrder], 25, 25)`\n\n1. Transfer **25** **`C`** from **userB** into `CTFExchange`\n2. Transfer **25** **`C`** from **userA** into `CTFExchange`\n3. Mint **50** token sets (= **50** token **`A`** + **50** token **`A'`**)\n4. Transfer **50** token **`A`** from `CTFExchange` to **userA**\n5. Transfer **50** token **`A'`** from `CTFExchange` to **userB**\n\n\n### Scenario 3 - `MERGE`\n\n#### Maker Order\n\n- **UserA** SELL **50** token **`A`** @ **$0.50**\n\n*(pseudo variables)*\n```json\n{\n  \"maker\": \"userA\",\n  \"makerAsset\": \"A\",\n  \"takerAsset\": \"C\",\n  \"makerAmount\": 50,\n  \"takerAmount\": 25\n}\n```\n\n#### Taker Order\n\n- **UserB** SELL **100** token **`A'`** @ **$0.50**\n\n*(pseudo variables)*\n```json\n{\n  \"maker\": \"userB\",\n  \"makerAsset\": \"A'\",\n  \"takerAsset\": \"C'\",\n  \"makerAmount\": 100,\n  \"takerAmount\": 50\n}\n```\n\n#### Match Operation Overview\n\n`matchOrders(makerOrder, [takerOrder], 50, 50)`\n\n1. Transfer **50** **`A'`** from **userB** into `CTFExchange`\n2. Transfer **50** **`A`** from **userA** into `CTFExchange`\n3. Merge **50** token sets into **50** **`C`**(**50** token **`A`** + **50** token **`A'`** = **50** **`C`**)\n4. Transfer **25** **`C`** from `CTFExchange` to **userA**\n5. Transfer **25** **`C`** from `CTFExchange` to **userB**\n\n## Fees\n\nFees are levied in the output asset (proceeds). Fees for binary options with a complementary relationship (ie **`A`** + **`A'`** = **`C`**) must be symmetric to preserve market integrity. Symmetric means that someone selling 100 shares of `A` @ $0.99 should pay the same fee value as someone buying 100 `A'` @ $0.01. An intuition for this requires understanding that minting/merging a complementary token set for collateral can happen at any time. Fees are thus implemented in the following manner. \n\nIf buying (ie receiving **`A`** or **`A'`**), the fee is levied on the proceed tokens. If selling (ie receiving **`C`**), the fee is levied on the proceed collateral. The base fee rate (`baseFeeRate`) is signed into the order struct. The base fee rate corresponds to 2x the fee rate (collateral per unit of outcome token) paid by traders when the price of the two tokens is equal (ie $0.50 and $0.50). Moving away from a centered price, the following formulas are used to calculate the fees making sure to maintain symmetry.\n\nusdcFee =  baseRate * min(price, 1-price) * outcomeShareCount\n\n**Case 1:** If selling outcome tokens (base) for collateral (quote):\n\n$feeQuote =  baseRate * \\min(price, 1-price) * size$\n\n**Case 2:** If buying outcome tokens (base) with collateral (quote):\n\n$feeBase =  baseRate * \\min(price, 1-price) * \\frac{size}{price}$\n\n### Fee Examples:\n\n*(assume the full order is filled)*\n\n`baseFeeRate` = 0.02 (usdc/condition)\n\n____\n\nBUY **100** **`A`** @ **$0.50** \n\n`fee` = 2 **`A`**\n\n($1.00 in value)\n___\n\nSELL **100** **`A'`** @ **$0.50** \n\n`fee` = 1.0 **`C`**\n\n($1.00 in value)\n___\n\nBUY **100** **`A`** @ **$0.10** \n\n`fee` = 2 **`A`**\n\n($0.20 in value)\n___\n\nSELL **100** **`A``** @ **$0.90** \n\n`fee` = 0.20 **`C`**\n\n($0.20 in value)\n\n___\n\nBUY **100** **`A`** @ **$0.90** \n\n`fee` = .222 **`A`**\n\n($0.20 in value)\n___\n\nSELL **100** **`A``** @ **$0.10** \n\n`fee` = 0.20 **`C`**\n\n($0.20 in value)\n\n## Package Layout\n\nThe [`exchange/`]() package includes libraries, mixins, interface definitions and tests supporting the primary contract `CTFExchange`. Mixins are primarily full implementations of related interfaces that are then inherited by the `CTFExchange`. These contracts define the core logic and are supported by library contracts. Mixins are designated as abstract functions because they are intended to always be inherited from. Interfaces are generally separated into those that define function signatures and those that define events and errors (EE).\n\n\n  \n\n"
  },
  {
    "path": "docs/mixins/AssetOperations.md",
    "content": "# Asset Operations\n\nProvides balance fetching, transferring and ctf utilities as an abstract contract. Implements both the `IAssetOperations` and `IAssets` interface. \n\n## `_getBalance`\n\nGets the contract's balance of collateral (`tokenID` == 0) or the contract's balance of the conditional token. \n\nParameters:\n\n```java\nuint256 tokenId // ERC1155 tokenID for ctf, or 0 for getting collateral (ERC20) balance\n```\n\nReturns:\n\n```java\nuint256 // token balance\n```\n\n## `_transfer`\n\nTransfers a quantity of assets, defined by a tokenID, from one address to another address. Calls either `_transferCollateral` or `TransferHelper._transferFromERC1155`. \n\nParameters:\n\n```java\naddress from // account from which to transfer assets\naddress to // account to which to transfer assets\nuint256 id // ID of asset to transfer. ERC1155 tokenID for ctf, or 0 for getting collateral (ERC20) balance\nuint256 value // amount of asset to transfer\n```\n\n## `_transferCollateral`\n\nCalled by `_transfer` in the case that `id` == 0. Transfers ERC20 collateral using the `TransferHelper` library which in turn uses either the `transfer` or `transferFrom` ERC20 interface methods. The choice of transfer method depends on whether or not the from address is the contract itself. \n\nParameters:\n\n```java\naddress from // account from which to transfer the ERC20 tokens\naddress to // account to which to transfer the ERC20 tokens\nuint256 value // amount of ERC20 tokens to transfer\n```\n\n## `_mint`\n\nMints a full conditional token set from collateral by calling the `splitPostion` function ont he ctf contract with the provided `conditionId`. This will convert X units of collateral (ERC20) into X units of complementary outcome tokens (ERC1155). The zeroed bytes32 is used as the `parentCollectionId` and the partition is the simple binary case [1,2]. You can read more about Gnosis Conditional Tokens [here](https://docs.gnosis.io/conditionaltokens/docs/devguide01/).\n\nParameters:\n\n```java\nbytes32 conditionId // id of condition on which to split\nuint256 amount // quantity of collateral to split. Note the collateral and minted conditional tokens will use the same number of decimals.\n```\n\n\n## `_merge`\n\nOpposite of `_mint`. Takes complete sets (equal parts of two complementary outcome tokens) and merges (burns) them by calling the `mergePositions` function on the ctf contract with the provided `conditionId`. Specifically this will convert X complete sets (X of token A (ERC1155) and X of its its complement token A' (ERC1155)) into X units of collateral (ERC20). This function assumes merging happens on a binary set and for the zeroed bytes32 `parentCollectionId`. You can read more about Gnosis Conditional Tokens [here](https://docs.gnosis.io/conditionaltokens/docs/devguide01/).\n\nParameters:\n\n```java\nbytes32 conditionId // id of condition on which to merge\nuint256 amount // quantity of complete sets to burn for their underlying collateral.\n```"
  },
  {
    "path": "docs/mixins/Assets.md",
    "content": "# Assets\n\nStores the addresses of the ERC20 collateral and ERC155 outcome tokens. \n\n## `constructor`\n\nInitializes the contract, setting the collateral token address and ctf token address state variables. Also approves the ctf contract to spend usdc on the contract's behalf.\n\nParameters:\n\n```java\naddress _collateral // collateral token (ERC20)\naddress _ctf // ctf outcome token (ERC1155)\n```\n\n## `getCollateral`\n\nGets the stored `collateral` address.\n\nReturns:\n\n```java\naddress // collateral token address\n```\n\n## `getCtf`\n\nGets the stored `ctf` address.\n\nReturns:\n\n```java\naddress // ctf address\n```"
  },
  {
    "path": "docs/mixins/Auth.md",
    "content": "# Auth\n\nManages authenticated address with two distinct tiers: `admins` and `operators`. Both roles are represented through mappings allowing for any address to be designated to either role. Admins ultimately have the highest role based access control as they are capable of modifying (adding/removing) the `operators` mapping. All `admins` are equal and can add/remove other `admins`. Initially the contract deployer is the only authorized admin and `operator`. Implements `IAuth` interface.\n\n## `onlyAdmin`\n\nModifier that reverts in the case that the `msg.sender` is not an admin specifically, it checks the value of `msg.sender` in the `admins` mapping, reverting if it's not `1`. \n\n## `onlyOperator`\n\nModifier that reverts in the case that the `msg.sender` is not an operator specifically, it checks the value of `msg.sender` in the `operators` mapping, reverting if it's not `1`. \n\n## `constructor`\n\nInitializes the contract, designating the deployer as the sole admin and operator.\n\n## `isAdmin`\n\nGets a boolean indicating whether or not a specified address has been designated as an admin. \n\nParameters:\n\n```java\naddress usr // address to check for admin status\n```\n\nReturns:\n\n```java\nbool // true if usr is an admin, false if not\n```\n\n## `isOperator`\n\nGets a boolean indicating whether or not a specified address has been designated as an operator. \n\nParameters:\n\n```java\naddress usr // address to check for operator status\n```\n\nReturns:\n\n```java\nbool // true if usr is an operator, false if not\n```\n\n## `addAdmin`\n\nAdds an admin by setting the value of a specified address key to `1` in the `admins` mapping. \n\nRequirements:\n\n- caller is `admin` (`onlyAdmin`)\n\nParameters:\n\n```java\naddress admin_ // address to add as an admin\n```\n\nEmits:\n\n- `NewAdmin(admin_, msg.sender)`\n\n## `addOperator`\n\nAdds an operator by setting the value of a specified address key to `1` in the `operators` mapping. \n\nRequirements:\n\n- caller is `admin` (`onlyAdmin`)\n\nParameters:\n\n```java\naddress operator_ // address to add as an operator\n```\n\nEmits:\n\n- `NewOperator(operator_, msg.sender)`\n\n## `removeAdmin`\n\nRemoves an admin by setting the value of a specified address key to `0` in the `admins` mapping. \n\nRequirements:\n\n- caller is `admin` (`onlyAdmin`)\n\nParameters:\n\n```java\naddress admin // address to remove as an admin\n```\n\nEmits:\n\n- `RemovedAdmin(admin, msg.sender)`\n\n## `removeOperator`\n\nRemoves an operator by setting the value of a specified address key to `0` in the `operator` mapping. \n\nRequirements:\n\n- caller is `admin` (`onlyAdmin`)\n\nParameters:\n\n```java\naddress operator // address to remove as an admin\n```\n\nEmits:\n\n- `RemovedOperator(operator, msg.sender)`"
  },
  {
    "path": "docs/mixins/Fees.md",
    "content": "# Fees\n\nProvides simple utilities related to setting/getting a max fee rate\n\n## `getMaxFeeRate`\n\nGets the max fee rate which is hard coded to 1000 bps.\n\nReturns:\n\n```java\nuint256 // max fee rate that can be signed into an order\n```\n\n## `getFeeReceiver`\n\nGets the fee receiver.\n\nReturns:\n\n```java\naddress feeReceiver // address to which fees should be sent\n```\n\n## `_setFeeReceiver`\n\nSets a new fee receiver.\n\nParameters:\n\n```java\naddress _feeReceiver // address to which fees should be sent\n```"
  },
  {
    "path": "docs/mixins/Hashing.md",
    "content": "# Hashing\n\nProvides a simple EIP712 typed structured data hashing utility function. Inherits from Open Zeppelin's draft-EIP712 contract and implements the `IHashing` interface. \n\n## `constructor`\n\nInitializes the `Hasing` contract, setting the domainSeparator state variable via the parent `EIP712` contract's `_domainSeparatorV4` function and also calls the `EIP712` parent constructor. \n\nParameters:\n\n```java\naddress name // name of the signing domain\naddress version // current major version of signing domain\n```\n\n\n## `hashOrder`\n\nHashes an `Order` object according to the EIP712 procedure for hashing and signing of typed structured data. This will mirror the hashing done in client libraries used to prepare and sign orders. \n\n\nParameters:\n\n```java\nOrder order // order object to hash \n```\n\nReturns:\n\n```java\nbytes32 // typed data hash of order object\n```"
  },
  {
    "path": "docs/mixins/NonceManager.md",
    "content": "# Nonce Manager\n\nThe nonce manager is a mixin responsible for maintaining a mapping of account nonces. These account nonces are used to determine the validity of an order and allow users to cancel orders via nonce changes and increments. Specifically, an order is only valid if the nonce included in the signed order matches the signers current nonce value. Note that nonces can only increase therefore if an account sets their nonce to the max unint256, they will no longer be able to cancel orders via nonce increments. \n\n\n## `incrementNonce`\n\nIncrements (by 1) an account's nonce. `msg.sender` is used to determine the account of which to increment the nonce for. \n\n## `updateNonce`\n\nUpdates an account's nonce by adding a specific uint256 `val` to the user's current nonce value. Again, `msg.sender` is used to determine the account for nonce addition.\n\nParameters:\n\n```java\nuint256 val // value to add to user's current nonce\n```\n\n## `isValidNonce`\n\nProvided a user address and a nonce, returns a boolean indicating whether or not the specified nonce matches the user's nonce stored in the `nonces` state variable mapping. \n\nParameters:\n\n```java\naddress usr // account to match nonce for\nuint256 nonce // nonce value to compare against\n```\n\nReturns:\n\n```java\nbool // indicates whether a supplied nonce matches the user's nonce as stored in nonces mapping\n```"
  },
  {
    "path": "docs/mixins/Pausable.md",
    "content": "# Pausable\n\nUsed to provide a trading \"kill switch\". Specifically, the primary entry points to `CTFExchange` are all decorated with the `notPaused` modifier, meaning trading can be paused if needed. This contract provides simple utilities for pausing/unpausing. \n\n## `notPaused`\n\nModifier that reverts in the case that the state variable `paused` is `true` (`bool`). Otherwise, execution of modified function continues without disruption.\n\n## `_pauseTrading`\n\nInternal function that sets the `paused` state variable to `true` which result in any `notPaused` decorated function to revert. \n\nEmits:\n\n- `TradingPaused(msg.sender)`\n\n## `unpauseTrading`\n\nInternal function that sets the `paused` state variable to `false`. This unpauses trading by making the `notPaused` modifier not hit the revert path.\n\nEmits:\n\n- `TradingUnpaused(msg.sender)`\n\n\n"
  },
  {
    "path": "docs/mixins/ProxyFactoryHelper.md",
    "content": "# ProxyFactoryHelper\n\n`PolyFactoryHelper` manages referenced proxy wallet factory addresses and provides wrappers around functions contained in both `PolySafeLib` and `PolyProxyLib` which calculate wallet addresses given the \"owning\" or \"signing\" EOA addresses of the proxy wallets. The `CTFExchange` supports two signature types related to contract wallets. Users of Polymarket's interface trade from contract wallets. Originally, these wallets were a custom implementation, but later, Gnosis safes were used. In order to maintain backwards compatibility, both types are supported by the `CTFExchange`. In both cases, the EOA that deploys/creates the proxy wallet is the approved \"owner\" of that wallet. This means that they are able to sign/execute transaction on the behalf of the contract. User's funds live in these proxy wallets, thus in order to support off-chain order signing (EOAs), the `CTFExchange` must be able to relate a signer to a corresponding wallet address. This contract along with the supporting library functions allow exactly that. \n\n## `constructor`\n\nSets the `proxyFactory` and `safeFactory` state variables. \n\nParameters:\n\n```java\naddress _proxyFactory // address of Polymarket proxy wallet factory\naddress _safeFactory // address of gnosis safe factory\n```\n\n## `getProxyFactory`\n\nGetter for the Polymarket proxy factory address.\n\nReturns:\n\n```java\naddress // address of Polymarket proxy wallet factory\n```\n\n## `getSafeFactory`\n\nGetter for the Gnosis safe factory address.\n\nReturns:\n\n```java\naddress // address of gnosis safe factory\n```\n\n## `getPolyProxyFactoryImplementation`\n\nCalls the `getImplementation` function on the `proxyFactory` which should return the address of the proxy wallet implementation that is cloned when a new wallet is created via the factory. \n\nReturns:\n\n```java\naddress // the Polymarket Proxy factory implementation\n```\n\n## `getSafeFactoryImplementation`\n\nCalls the `masterCopy` function on the `safeFactory` which should return the address of the gnosis safe implementation that is cloned when a new wallet is created via the factory. \n\nReturns:\n\n```java\naddress // the Safe factory implementation\n```\n\n## `getPolyProxyWalletAddress`\n\nUses the `PolyProxyLib`'s `computeProxyWalletAddress` function, called with the provided owner address, the stored Polymarket proxy factory implementation address and the proxy factory address to return the wallet address of the owner. \n\nParameters:\n\n```java\naddress _addr // the owner's address for which to calculate their proxy address\n```\n\nReturns:\n\n```java\naddress // the _addr's owned proxy wallet address\n```\n\n## `getSafeAddress`\n\nUses the `PolySafeLib`'s `getSafeAddress` function, called with the provided owner address, the stored safe factory implementation address and the safe factory address to return the wallet address of the owner. \n\nParameters:\n\n```java\naddress _addr // the owner's address for which to calculate their safe address\n```\n\nReturns:\n\n```java\naddress // the _addr's owned safe address\n```\n\n## `_setProxyFactory`\n\nInternal function to set the `proxyFactory` address. \n\nParameters:\n\n```java\naddress _proxyFactory // Polymarket proxy factory address\n```\n\nEmits:\n\n- `ProxyFactoryUpdated(proxyFactory, _proxyFactory)`\n\n\n## `_setSafeFactory`\n\nParameters:\n\n```java\naddress _safeFactory // Gnosis safe factory address\n```\n\nInternal function to set the `safeFactory` address. \n\nEmits:\n\n- `SafeFactoryUpdated(safeFactory, _safeFactory)`"
  },
  {
    "path": "docs/mixins/Registry.md",
    "content": "# Registry\n\nThe `CTFExchange` supports \"binary matching\". This assumes that two complementary tokens are always worth, in sum, 1 unit of underlying collateral. This is enforced by the CTF contract which always allows minting and merging of full sets (complete collection of outcomes, in our case `A` and its binary complement `A'`). What this ultimately unlocks for the `CTFExchange` is matching between buy orders of `A` and `A'` (via a preceeding \"mint\" operation), and sell orders of `A` and `A'` (via a succeeding \"merge\" operation). The `CTFExchange` gets orders to match and is able to determine whether or not a \"mint\" or \"merge\" operation is ncessary. The challenge, is that the \"mint\"/\"merge\" operation requires knowing the order's base asset's (conditional token) corresponding `conditionId`. Thus, there needs to be a way for the `conditionId` to be gotten from the `tokenId`. The `Registry` is responsible for this function and maintains a mapping of `tokenId`s to `OutcomeToken` objects which include information relating to the specific `tokenId` including the `complement`'s `tokenId`, and the parent `conditionId`. It is the responsibility of operators to register new outcome tokens. Note all methods assume benevolent input by the operator, specifically that they are registering the correct tokenIds/complements/conditions and that they are all binary outcomes that are valid in the context of the CTF contract.\n\n\n## `getConditionId`\n\nGets the associated `conditionId` for a `tokenId` by looking it up in the `registry` mapping and returning the `conditionId` value.\n\nParameters:\n\n```java\nuint256 token // token id for which to get conditionId for\n```\n\nReturns:\n\n```java\nbytes32 // parent conditionId of the token according to the registry\n```\n\n## `getComplement`\n\nGets the complementary `tokenId` for a specified `tokenId` by looking it up in the `registry` mapping and returning the `complement` value. \n\nParameters:\n\n```java\nuint256 token // token id for which to get complement token id for\n```\n\nReturns:\n\n```java\nuint256 // complement token id\n```\n\n## `validateComplement`\n\nChecks whether the `token` id and `complement` id correspond according to `token`'s value in the `registry` mapping. Reverts if not.\n\nParameters:\n\n```java\nuint256 token // token id for which to check complement\nuint256 complement // suspected complement token id of token\n```\n\n## `validateTokenId`\n\nChecks whether a valid token id (`!=0`) has been registered. Reverts if not\n\nParameters:\n\n```java\nuint256 tokenId // token id to validate registration for\n```\n\n## `validateMatchingTokenIds`\n\nChecks whether the `token0` id and `token1` id are equal if it has been registered. Reverts if not.\n\nParameters:\n\n```java\nuint256 token0 // first token id to compare for equality \nuint256 token1 // second token id to compare for equality\n```\n\n## `_registerToken`\n\nRegisters complementary token pair.\n\nParameters:\n\n```java\nuint256 token0 // first token id of pair\nuint256 token1 // second token id of pair\nbytes32 conditionID // cft conditionId for the pair\n```\n\nRequirements:\n\n- `token0` and `token1` are not equal\n- neither `token0` or `token1` are zero\n- neither `token0` or `token` have been registered\n\n\nEmits:\n\n- `TokenRegistered(token0, token1, conditionId)`\n- `TokenRegistered(token1, token0, conditionId)`\n"
  },
  {
    "path": "docs/mixins/Signatures.md",
    "content": "# Signatures \n\nThe `CTFExchange` supports three distinct signature types:\n\n- **EOA** - ECDSA EIP712 signatures signed by EOAs\n- **POLY_PROXY** - EIP712 signatures signed by EOAs that own Polymarket Proxy wallets\n- **POLY_GNOSIS_SAFE** - EIP712 signatures signed by EOAs that own Polymarket Gnosis safes\n\nThe `Signatures` contract provides functions for validating signatures and associated utilities. \n\n## `validateOrderSignature`\n\nValidates the signature of an order. Calls `isValidSignature`, reverts if not truthy. \n\nParameters:\n\n```java\nbytes32 orderHash // the has of the order\nOrder order // the order which includes the signature\n```\n\n## `isValidSignature`\n\nVerifies a signature for signed Order structs. Follows validation paths based on the signature type. Returns boolean indicating signature validity\n\nParameters:\n\n```java\naddress signer // Address of the signer\naddress associated //Address associated with the signer. For POLY_PROXY and POLY_GNOSIS_SAFE signature types, this is the address of the proxy or the safe. For EOA, this is the same as the signer address and is not used.\nbytes32 structHash // hash of the struct being verified\nbytes signature // signature to be verified\nuint256 signatureType // signature type EOA, POLY_PROXY or POLY_GNOSIS_SAFE\n```\n\nReturns:\n\n```java\nbool // indicates validity of signature\n```\n\n## `verifyECDSASignature`\n\nVerifies that a given ECDSA signature was that of the provided `signer` over the given `structHash`. Uses `SilentECDSA` library. Returns boolean indicating signature validity.\n\nParameters:\n\n```java\naddress signer // signer address\nbytes32 structHash // hash of the struct being verified\nbytes signature // signature to be verified\n```\n\nReturns:\n\n```java\nbool // indicates validity of signature\n```\n\n## `verifyPolyProxySignature`\n\nVerifies a signature created by the owner of a Polymarket proxy wallet. Specifically it verifies that:\n\n- ECDSA signature is valid \n- Proxy wallet is owned by the signer\n\nParameters:\n\n```java\naddress signer // signer\naddress proxyWallet // Polymarket proxy wallet (should be one \"owned\" by signer)\nbytes32 structHash // Hash of the struct being verified\nbytes signature // Signature to be verified\n```\n\nReturns:\n\n```java\nbool // indicates validity of signature\n```\n\n## `verifyPolySafeSignature`\n\nVerifies a signature created by the owner of a Polymarket Gnosis safe. Specifically it verifies that:\n\n- ECDSA signature is valid \n- PSafe is owned by the signer\n\nParameters:\n\n```java\naddress signer // signer\naddress safeAddress // gnosis safe (should be one \"owned\" by signer)\nbytes32 structHash // Hash of the struct being verified\nbytes signature // Signature to be verified\n```\n\nReturns:\n\n```java\nbool // indicates validity of signature\n```\n\n## `getSignatureType`\n\nReturns the associated `SignatureType` enum value provided an index.\n\nParameters:\n\n```java\nuint256 signatureType // index of signature type\n```\n\nReturns:\n\n```java\nSignatureType // SignatureType enum value of index\n```"
  },
  {
    "path": "docs/mixins/Trading.md",
    "content": "# Trading\n\nTrading implements the core exchange logic for trading CTF assets. \n\n*Note a core assumption that is made is that the collateral and conditional tokens have the same number of decimals. This is true for any CTF token.*\n\n## `getOrderStatus`\n\nGet the status of an order. An order can either be not-filled, partially filled or fully filled. If an order has not been filled, its hash will not exist in the `orderStatus` mapping. If it has been partially filled its hash will exist in this mapping and the maker amount `remaining` will be defined. If the order has been fully filled the hash will exist and the `isCompleted` bool in the `OrderStatus` object will be `true`\n\nParameters:\n\n```java\nbytes32 orderHash // hash of the order\n```\n\nReturns:\n\n```java\nOrderStatus // status object for the order hash\n```\n\n## `validateOrder`\n\nValidates an order. Hashes an order and calls `_validateOrder` with the order hash and order object.\n\nParameters:\n\n```java\nOrder order // order to be validated\n```\n\n## `cancelOrder`\n\nCancels an order. Calls `_cancelOrder` with the order. An order can only be cancelled by its maker, the address which holds funds for the order.\n\nParameters:\n\n```java\nOrder order // order to be cancelled\n```\n\n## `cancelOrders`\n\nCancels a set of orders by calling `_cancelOrder` on each order is provided order array. \n\nParameters:\n\n```java\nOrder[] orders // orders to be cancelled\n```\n\n## `_cancelOrder`\n\nCancels an order by setting its status to completed.\n\nRequirements:\n\n- order's `maker` must be `msg.sender`\n- order cannot have already been filled\n\nParameters:\n\n```java\nOrder order // order  to cancel\n```\n\nEmits:\n\n- `OrderCancelled(orderHash)`\n\n## `_validateOrder`\n\nValidates an order alongside its hash. Reverts if order is not valid.\n\nRequirements:\n\n- order is not expired\n- order fee rate is not greater than configured max fee rate\n- order signature is valid for order\n- order is not already filled\n- order has valid nonce\n\nParameters:\n\n```java\nbytes32 orderHash // hash of order to validate\nOrder order // order object corresponding to orderHash\n```\n\n## `_fillOrder`\n\nFills an order against the caller. First validates the order, then fills it up to the amount specified by `fillAmount`, updates the status and takes calculated fee. \n\nParameters:\n\n```java\nOrder order // order to fill\nuint256 fillAmount // amount to be filled, always in terms of the maker amount\naddress to // address to receive proceeds from filling the order\n```\n\nEmits:\n\n- `emit OrderFilled(orderHash, msg.sender, order.makerAssetId, order.takerAssetId, making, remaining, fee)`\n\n\n## `_fillOrders`\n\nFills a set of orders against the caller by calling `_fillOrders` for each order and corresponding fill amount. \n\n```java\nOrder[] orders // orders to fill\nuint256[] fillAmounts // amounts to be filled for each order in orders, always in terms of the maker amount\naddress to // address to receive proceeds from filling the orders\n```\n\n## `_matchOrders`\n\nMatches a taker order against an array of maker orders up to the amounts specified. Validation is performed to make sure each maker order is able to be filled with the taker order up to the amount specified. The order of transfer operations in the fill is:\n\n1. transfer making amount from taker order to exchange\n2. Fill each maker order\n   1. Transfer making amount for maker order into exchange\n   2. Execute match call (merge or mint)\n   3. Transfer taking amount for maker order to the maker order's maker\n   4. Fee charged on maker\n3. transfer taking amount (calculated based on maker order fills, will include any price improvement for buying) to taker order maker\n4. Fee charged on taker\n5. transfer any excess making amount left from exchange to taker order maker (price improvement in case of selling)\n\nRequirements:\n\n- all orders valid\n- making amounts are valid for each order\n- taker order provides enough assets for the filling of all maker orders to the amounts specified\n- each maker order is marketable against taker order\n- taker gets at least as much proceeds as they expect\n\nParameters:\n\n```java\nOrder takerOrder // taker order to be matched\nOrder[] makerOrders // array of maker orders to be matched against the taker order\nuint256 takerFillAmount // amount to fill on the taker order, in terms of the maker amount\nuint256[] memory makerFillAmounts // array of amounts to fill on the maker orders, in terms of the maker amount\n```\n\nEmits:\n\n- `OrderFilled(orderHash, address(this), takerOrder.makerAssetId, takerOrder.takerAssetId, making, remaining, fee)`\n- `OrdersMatched(orderHash, takerOrder.makerAssetId, takerOrder.takerAssetId, making, taking)`\n\n## `_fillMakerOrders`\n\nFills an array of maker orders for the specified amounts. \n\nParameters:\n\n```java\nOrder takerOrder // taker order\nOrder[] makerOrders // maker orders\nuint256[] makerFillAmounts // maker amounts to fill on each maker order\n```\n\n## `_fillMakerOrder`\n\nFills a maker order. In doing so, validates it is marketable with a supplied taker order, derives the pre/post matching operation and charges fees.\n\nRequirements:\n\n- valid taker and maker order\n- maker and taker order can be crossed\n- amount provided is fillable for maker order\n\nParameters:\n\n```java\nOrder takerOrder // taker order object\nOrder makerOrder // maker order object\nuint256 fillAmount // maker amount to be filled on makerOrder\n```\n\nEmits:\n\n- `OrderFilled(hashOrder(makerOrder), takerOrder.maker, makerOrder.makerAssetId, makerOrder.takerAssetId, making, remaining, fee)`\n\n\n## `_validateOrderAndCalcTaking`\n\nPerforms common order validation and calculates taking amount for a matched order. The taking amount is proportional to the making amount that is being filled. Additionally the order status is updated to reflect the amount that is being filled. \n\nRequirements:\n\n- Order is valid\n- Making amount can be filled on order\n\nParameters:\n\n```java\nOrder order // order being validated\nuint256 making // maker amount to be filled of order\n```\n\nReturns:\n\n```java\nuint256 takingAmount // amount of taking amount corresponding to supplied taking amount \nuint256 remainingAmount // maker amount remaining on the order. \n```\n\n## `_fillFacingExchange`\n\nFills a maker order using the Exchange as the counterparty. Follows the following steps:\n\n1. Transfers makingAmount of maker asset from the order maker to the exchange\n2. Executes the match call\n   1. In the case a buy + sell is being matching nothing happens\n   2. In the case a buy + buy is being matched, a mint (split) happens, since the taker order's collateral is already available and the maker order's collateral was just transferred there should be enough to mint takingAmount.\n   3. In the case a sell + sell is being matched a merge happens, since the taker order's conditional tokens will have already been transferred to the exchange and the taker order's conditional tokens were just transferred, there should be enough conditional tokens to merge makingAmount.\n3. Transfer taking amount of taker asset to the order maker\n\nParameters:\n\n```java\nuint256 makingAmount // Amount to be filled in terms of maker amount\nuint256 takingAmount // Amount to be filled in terms of taker amount\nOrder order // the order to be filed\nMatchType matchType // the match type\n```\n\n## `_deriveMatchType`\n\nProvided a taker and maker order determines the matching operation that is needed. \n\nParameters:\n\n```java\nOrder takerOrder // the taker order\nOrder makerOrder // the maker order\n```\n\nReturns:\n\n```java\nMatchType // type of match NORMAL, MINT or MERGE\n```\n\n## `_executeMatchCall`\n\nExecutes a CTF call to match orders by minting new Outcome tokens or merging Outcome tokens into collateral.\n\nParameters:\n\n```java\nuint256 makingAmount // Amount to be filled in terms of maker amount, used as amount in merge case\nuint256 takingAmount // Amount to be filled in terms of taker amount, used as amount in mint case\nOrder order // order to be filled\nMatchType matchType // the match type\n```\n\n## `_validateTakerAndMaker`\n\nEnsures the taker and maker orders can be matched against each other.\n\nRequirements:\n\n- orders are crossing\n- in case of NORMAL, conditional tokenIds match across maker and taker order\n- in case of MINT, conditional tokenIds should be complementary\n- in case of MERGE, conditional tokenIds should be complementary\n\nParameters:\n\n```java\nOrder takerOrder // the taker order\nOrder makerOrder // the maker order\nMatchType matchType // the match type\n```\n\n## `_chargeFee`\n\nCharges a fee from a payer to the receiver.\n\nParameters:\n\n```java\naddress payer // fee payer\naddress receiver // fee recipient\nuint256 tokenId // token id of fee, 0 if collateral\nuint256 fee // fee amount\n```\n\nEmits:\n\n- `FeeReceived(payer, receiver, tokenId, fee)`\n\n## `_updateOrderStatus`\n\nUpdates the order status. Will mark as completed if the making amount plus any already filled amount of order is equal to total order size, otherwise will calculate and store the remaining amount. \n\nParameters:\n\n```java\nbytes32 orderHash // order hash\nOrder order // order object\nuint256 makingAmount // making amount\n```\n\nReturns:\n\n```java\nuint256 // remaining maker amount for order\n```\n\n## `_updateTakingWithSurplus`\n\nChecks to see how much of the tokenId the exchange contract has received and verifies it is greater than the min amount and returns the max(actualAmount, minimumAmount).\n\nParameters:\n\n```java\nuint256 minimumAmount // minimum amount exchange should have of tokenId\nuint256 tokenId // tokenId to get balance of\n```\n\nReturns:\n\n```java\nuint256 // amount of tokenId in contract\n```"
  },
  {
    "path": "foundry.toml",
    "content": "[profile.default]\nsolc = \"0.8.15\"\nffi = true\ngas_reports = [\"*\"]\nout = \"out\"\noptimizer_runs = 1000000\n\n# fuzz settings\n[profile.default.fuzz]\nruns = 256\n[profile.intense.fuzz]\nruns = 10_000\n\n[fmt]\nline_length = 120\ntab_width = 4\nbracket_spacing = true\nwrap_comments = true\nsingle_line_statement_blocks = \"single\""
  },
  {
    "path": "package.json",
    "content": "{\n    \"name\": \"polymarket-ctf-exchange\",\n    \"scripts\": {\n        \"test\": \"forge test\"\n    },\n    \"devDependencies\": {\n        \"prettier\": \"^2.5.1\",\n        \"prettier-plugin-solidity\": \"^1.0.0-beta.19\"\n    }\n}\n"
  },
  {
    "path": "remappings.txt",
    "content": "openzeppelin/=lib/openzeppelin-contracts/contracts/\nopenzeppelin-contracts/=lib/openzeppelin-contracts/contracts/\n\nsolmate/=lib/solmate/src/\nsolady/=lib/solady/src/\n\ncommon/=src/common/\ncreator/=src/creator/\ndev/=src/dev/\nexchange/=src/exchange/"
  },
  {
    "path": "snapshots/GasSnapshots_Test.json",
    "content": "{\n  \"combo_complementary_merge_10makers\": \"953338\",\n  \"combo_complementary_merge_20makers\": \"1724687\",\n  \"combo_complementary_mint_10makers\": \"954055\",\n  \"combo_complementary_mint_20makers\": \"1745359\",\n  \"complementary_10makers\": \"666818\",\n  \"complementary_1maker\": \"207402\",\n  \"complementary_20makers\": \"1178855\",\n  \"complementary_5makers\": \"411423\",\n  \"merge_10makers\": \"1205260\",\n  \"merge_1maker\": \"267846\",\n  \"merge_20makers\": \"2248481\",\n  \"merge_5makers\": \"684301\",\n  \"mint_10makers\": \"1259558\",\n  \"mint_1maker\": \"297631\",\n  \"mint_20makers\": \"2330028\",\n  \"mint_5makers\": \"724982\"\n}"
  },
  {
    "path": "src/common/ERC20.sol",
    "content": "// SPDX-License-Identifier: AGPL-3.0-only\npragma solidity ^0.8.15;\n\nimport {IERC20} from \"common/interfaces/IERC20.sol\";\n\n/// @notice Forked to have non-constant decimals, to set after deployment.\n/// @author Polymarket\n/// @author Modified from Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/ReentrancyGuard.sol)\n/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.\nabstract contract ERC20 is IERC20 {\n    /*//////////////////////////////////////////////////////////////\n                                 EVENTS\n    //////////////////////////////////////////////////////////////*/\n\n    event Transfer(address indexed from, address indexed to, uint256 amount);\n\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\n\n    /*//////////////////////////////////////////////////////////////\n                            METADATA STORAGE\n    //////////////////////////////////////////////////////////////*/\n\n    string public name;\n\n    string public symbol;\n\n    uint8 public decimals;\n\n    /*//////////////////////////////////////////////////////////////\n                              ERC20 STORAGE\n    //////////////////////////////////////////////////////////////*/\n\n    uint256 public totalSupply;\n\n    mapping(address => uint256) public balanceOf;\n\n    mapping(address => mapping(address => uint256)) public allowance;\n\n    /*//////////////////////////////////////////////////////////////\n                            EIP-2612 STORAGE\n    //////////////////////////////////////////////////////////////*/\n\n    uint256 internal immutable INITIAL_CHAIN_ID;\n\n    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;\n\n    mapping(address => uint256) public nonces;\n\n    /*//////////////////////////////////////////////////////////////\n                               CONSTRUCTOR\n    //////////////////////////////////////////////////////////////*/\n\n    constructor(string memory _name, string memory _symbol, uint8 _decimals) {\n        name = _name;\n        symbol = _symbol;\n        decimals = _decimals;\n\n        INITIAL_CHAIN_ID = block.chainid;\n        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                               ERC20 LOGIC\n    //////////////////////////////////////////////////////////////*/\n\n    function approve(address spender, uint256 amount) public virtual returns (bool) {\n        allowance[msg.sender][spender] = amount;\n\n        emit Approval(msg.sender, spender, amount);\n\n        return true;\n    }\n\n    function transfer(address to, uint256 amount) public virtual returns (bool) {\n        balanceOf[msg.sender] -= amount;\n\n        // Cannot overflow because the sum of all user\n        // balances can't exceed the max uint256 value.\n        unchecked {\n            balanceOf[to] += amount;\n        }\n\n        emit Transfer(msg.sender, to, amount);\n\n        return true;\n    }\n\n    function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) {\n        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.\n\n        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;\n\n        balanceOf[from] -= amount;\n\n        // Cannot overflow because the sum of all user\n        // balances can't exceed the max uint256 value.\n        unchecked {\n            balanceOf[to] += amount;\n        }\n\n        emit Transfer(from, to, amount);\n\n        return true;\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                             EIP-2612 LOGIC\n    //////////////////////////////////////////////////////////////*/\n\n    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)\n        public\n        virtual\n    {\n        require(deadline >= block.timestamp, \"PERMIT_DEADLINE_EXPIRED\");\n\n        // Unchecked because the only math done is incrementing\n        // the owner's nonce which cannot realistically overflow.\n        unchecked {\n            address recoveredAddress = ecrecover(\n                keccak256(\n                    abi.encodePacked(\n                        \"\\x19\\x01\",\n                        DOMAIN_SEPARATOR(),\n                        keccak256(\n                            abi.encode(\n                                keccak256(\n                                    \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\"\n                                ),\n                                owner,\n                                spender,\n                                value,\n                                nonces[owner]++,\n                                deadline\n                            )\n                        )\n                    )\n                ),\n                v,\n                r,\n                s\n            );\n\n            require(recoveredAddress != address(0) && recoveredAddress == owner, \"INVALID_SIGNER\");\n\n            allowance[recoveredAddress][spender] = value;\n        }\n\n        emit Approval(owner, spender, value);\n    }\n\n    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\n        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();\n    }\n\n    function computeDomainSeparator() internal view virtual returns (bytes32) {\n        return keccak256(\n            abi.encode(\n                keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"),\n                keccak256(bytes(name)),\n                keccak256(\"1\"),\n                block.chainid,\n                address(this)\n            )\n        );\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                        INTERNAL MINT/BURN LOGIC\n    //////////////////////////////////////////////////////////////*/\n\n    function _mint(address to, uint256 amount) internal virtual {\n        totalSupply += amount;\n\n        // Cannot overflow because the sum of all user\n        // balances can't exceed the max uint256 value.\n        unchecked {\n            balanceOf[to] += amount;\n        }\n\n        emit Transfer(address(0), to, amount);\n    }\n\n    function _burn(address from, uint256 amount) internal virtual {\n        balanceOf[from] -= amount;\n\n        // Cannot underflow because a user's balance\n        // will never be larger than the total supply.\n        unchecked {\n            totalSupply -= amount;\n        }\n\n        emit Transfer(from, address(0), amount);\n    }\n}\n"
  },
  {
    "path": "src/common/ReentrancyGuard.sol",
    "content": "// SPDX-License-Identifier: AGPL-3.0-only\npragma solidity >=0.8.0;\n\n/// @notice Forked from Solmate to handle clones.\n/// @author Polymarket\n/// @author Modified from Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/ReentrancyGuard.sol)\nabstract contract ReentrancyGuard {\n    uint256 private locked = 1;\n\n    modifier nonReentrant() virtual {\n        require(locked != 2, \"REENTRANCY\");\n\n        locked = 2;\n\n        _;\n\n        locked = 1;\n    }\n}\n"
  },
  {
    "path": "src/common/auth/Authorized.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport {Owned} from \"solmate/auth/Owned.sol\";\nimport {IAuthorized, IAuthorizedEE} from \"common/auth/interfaces/IAuthorized.sol\";\n\nabstract contract Authorized is Owned, IAuthorized {\n    mapping(address => bool) public authorized;\n\n    constructor(address _owner) Owned(_owner) {}\n\n    modifier onlyAuthorized() {\n        if (!authorized[msg.sender]) revert OnlyAuthorized();\n        _;\n    }\n\n    function addAuthorization(address _account) external onlyOwner {\n        authorized[_account] = true;\n\n        emit AuthorizationAdded(_account);\n    }\n\n    function removeAuthorization(address _account) external onlyOwner {\n        authorized[_account] = false;\n\n        emit AuthorizationRemoved(_account);\n    }\n}\n"
  },
  {
    "path": "src/common/auth/Ownable.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\ninterface IOwnable {\n    error OnlyOwner();\n}\n\n///@notice Ownable with transfer and accept\n///@notice We might not use this for anything.\nabstract contract Ownable is IOwnable {\n    address public owner;\n    address public nextOwner;\n\n    constructor(address _owner) {\n        owner = _owner;\n    }\n\n    modifier onlyOwner() {\n        if (msg.sender != owner) revert OnlyOwner();\n        _;\n    }\n\n    function transferOwnership(address _nextOwner) external onlyOwner {\n        nextOwner = _nextOwner;\n    }\n\n    function acceptOwnership() external {\n        if (msg.sender != nextOwner) revert();\n        owner = msg.sender;\n    }\n}\n"
  },
  {
    "path": "src/common/auth/Owned.sol",
    "content": "// SPDX-License-Identifier: AGPL-3.0-only\npragma solidity >=0.8.0;\n\nimport {IOwned, IOwnedEE} from \"common/auth/interfaces/IOwned.sol\";\n\n/// @notice Forked from solmate to add interface and custom errors.\n/// @notice Simple single owner authorization mixin.\n/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Owned.sol)\nabstract contract Owned is IOwned {\n    /*//////////////////////////////////////////////////////////////\n                            OWNERSHIP STORAGE\n    //////////////////////////////////////////////////////////////*/\n\n    address public owner;\n\n    modifier onlyOwner() virtual {\n        if (msg.sender != owner) revert OnlyOwner();\n\n        _;\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                               CONSTRUCTOR\n    //////////////////////////////////////////////////////////////*/\n\n    constructor(address _owner) {\n        owner = _owner;\n\n        emit OwnerUpdated(address(0), _owner);\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                             OWNERSHIP LOGIC\n    //////////////////////////////////////////////////////////////*/\n\n    function setOwner(address newOwner) public virtual onlyOwner {\n        owner = newOwner;\n\n        emit OwnerUpdated(msg.sender, newOwner);\n    }\n}\n"
  },
  {
    "path": "src/common/auth/interfaces/IAuthorized.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\ninterface IAuthorizedEE {\n    event AuthorizationAdded(address _account);\n    event AuthorizationRemoved(address _account);\n\n    error OnlyAuthorized();\n}\n\ninterface IAuthorized is IAuthorizedEE {\n    function addAuthorization(address _account) external;\n\n    function removeAuthorization(address _account) external;\n}\n"
  },
  {
    "path": "src/common/auth/interfaces/IOwned.sol",
    "content": "// SPDX-License-Identifier: AGPL-3.0-only\npragma solidity >=0.8.0;\n\ninterface IOwnedEE {\n    event OwnerUpdated(address indexed user, address indexed newOwner);\n\n    error OnlyOwner();\n}\n\ninterface IOwned is IOwnedEE {\n    function setOwner(address newOwner) external;\n}\n"
  },
  {
    "path": "src/common/interfaces/IERC20.sol",
    "content": "// SPDX-License-Identifier: AGPL-3.0-only\npragma solidity >=0.8.0;\n\n// interface for Solmate ERC20\ninterface IERC20 {\n    // event Approval(address indexed owner, address indexed spender, uint256 amount);\n    // event Transfer(address indexed from, address indexed to, uint256 amount);\n\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\n\n    function allowance(address, address) external view returns (uint256);\n\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    function balanceOf(address) external view returns (uint256);\n\n    function decimals() external view returns (uint8);\n\n    function name() external view returns (string memory);\n\n    function nonces(address) external view returns (uint256);\n\n    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)\n        external;\n\n    function symbol() external view returns (string memory);\n\n    function totalSupply() external view returns (uint256);\n\n    function transfer(address to, uint256 amount) external returns (bool);\n\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\n}\n"
  },
  {
    "path": "src/common/libraries/SafeTransferLib.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport {SafeTransferLib, ERC20} from \"solmate/utils/SafeTransferLib.sol\";\n"
  },
  {
    "path": "src/dev/TestHelper.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport {Test, console2 as console, stdStorage, StdStorage} from \"forge-std/Test.sol\";\nimport {ERC20} from \"common/ERC20.sol\";\nimport {TestMath} from \"dev/libraries/TestMath.sol\";\n\nabstract contract TestHelper is Test {\n    using TestMath for uint64;\n    using TestMath for uint256;\n\n    mapping(address => mapping(address => uint256)) private balanceCheckpoints;\n\n    address alice = address(1);\n    address brian = address(2);\n    address carly = address(3);\n    address dylan = address(4);\n    address erica = address(5);\n    address frank = address(6);\n    address grace = address(7);\n    address henry = address(8);\n\n    constructor() {\n        vm.label(alice, \"alice\");\n        vm.label(brian, \"brian\");\n        vm.label(carly, \"carly\");\n        vm.label(dylan, \"dylan\");\n        vm.label(erica, \"erica\");\n        vm.label(frank, \"frank\");\n        vm.label(grace, \"grace\");\n        vm.label(henry, \"henry\");\n    }\n\n    modifier with(address _account) {\n        vm.startPrank(_account);\n        _;\n        vm.stopPrank();\n    }\n\n    function hashAddress(bytes memory _digest) internal pure returns (address) {\n        return address(uint160(uint256(keccak256(_digest))));\n    }\n\n    function assertBalance(address _token, address _who, uint256 _amount) internal {\n        assertEq(ERC20(_token).balanceOf(_who), balanceCheckpoints[_token][_who] + _amount);\n    }\n\n    function checkpointBalance(address _token, address _who) internal {\n        balanceCheckpoints[_token][_who] = ERC20(_token).balanceOf(_who);\n    }\n\n    function balanceOf(address _token, address _who) internal view returns (uint256) {\n        return ERC20(_token).balanceOf(_who);\n    }\n\n    function approve(address _token, address _spender, uint256 _amount) internal {\n        ERC20(_token).approve(_spender, _amount);\n    }\n\n    ///@dev msg.sender is the owner of the approved tokens\n    function dealAndApprove(address _token, address _to, address _spender, uint256 _amount) internal {\n        deal(_token, _to, _amount);\n        approve(_token, _spender, _amount);\n    }\n\n    function add(uint256 _a, uint256 _b) internal pure returns (uint256) {\n        return _a + _b;\n    }\n\n    function advance(uint256 _delta) internal {\n        vm.roll(block.number + _delta);\n    }\n\n    function _address(bytes memory _seed) internal pure returns (address) {\n        return address(bytes20(keccak256(_seed)));\n    }\n}\n"
  },
  {
    "path": "src/dev/libraries/TestMath.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nlibrary TestMath {\n    // these binary operators implicitly cast smaller uints\n    // into uint256 before the operatiuon\n    function mul(uint256 _x, uint256 _y) internal pure returns (uint256) {\n        return _x * _y;\n    }\n\n    function add(uint256 _x, uint256 _y) internal pure returns (uint256) {\n        return _x + _y;\n    }\n}\n"
  },
  {
    "path": "src/dev/mocks/ERC1271Mock.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport { ECDSA } from \"openzeppelin-contracts/utils/cryptography/ECDSA.sol\";\n\ncontract ERC1271Mock {\n    address public signer;\n\n    bytes4 internal constant MAGIC_VALUE_1271 = 0x1626ba7e;\n\n    constructor(address _signer) {\n        signer = _signer;\n    }\n\n    function isValidSignature(bytes32 hash, bytes memory signature) public view returns (bytes4) {\n        return ECDSA.recover(hash, signature) == signer ? MAGIC_VALUE_1271 : bytes4(0);\n    }\n}\n"
  },
  {
    "path": "src/dev/mocks/ERC20.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport {ERC20 as BaseERC20} from \"solmate/tokens/ERC20.sol\";\n\n/// @dev always has 18 decimals\ncontract ERC20 is BaseERC20 {\n    constructor(string memory _name, string memory _symbol) BaseERC20(_name, _symbol, 18) {}\n\n    function mint(address _to, uint256 _amount) external {\n        _mint(_to, _amount);\n    }\n}\n"
  },
  {
    "path": "src/dev/mocks/USDC.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport {ERC20} from \"common/ERC20.sol\";\n\ncontract USDC is ERC20 {\n    constructor() ERC20(\"USDC\", \"USDC\", 6) {}\n\n    function mint(address _to, uint256 _amount) external {\n        _mint(_to, _amount);\n    }\n}\n"
  },
  {
    "path": "src/dev/script/callTest.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport {Script, console2 as console} from \"forge-std/Script.sol\";\nimport {ERC20} from \"openzeppelin/token/ERC20/ERC20.sol\";\n\ncontract call_test is Script {\n    // returns true\n    function run(address _callee) public returns (bool) {\n        address from = address(1);\n        address to = address(2);\n        uint256 value = 1;\n        (bool success,) = _callee.call(abi.encodeWithSelector(ERC20.transferFrom.selector, from, to, value));\n        return (success);\n    }\n\n    // returns false\n    function run() public returns (bool) {\n        address token = address(new ERC20(\"\", \"\"));\n        address from = address(1);\n        address to = address(2);\n        uint256 value = 1;\n        (bool success,) = token.call(abi.encodeWithSelector(ERC20.transferFrom.selector, from, to, value));\n        return (success);\n    }\n}\n"
  },
  {
    "path": "src/dev/script/ffi.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport {Test, console2 as console} from \"forge-std/Test.sol\";\n\n// simple demo of ffi with echo\ncontract ffi is Test {\n    function run() public {\n        string[] memory inputs = new string[](3);\n        inputs[0] = \"echo\";\n        inputs[1] = \"-n\";\n        inputs[2] = \"0xcafe\";\n        // or\n        // inputs[2] = 'cafe';\n\n        bytes memory result = vm.ffi(inputs);\n        console.logBytes(result);\n    }\n}\n"
  },
  {
    "path": "src/dev/script/useSolcVersion.s.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport {Script, console2 as console} from \"forge-std/Script.sol\";\nimport {ERC20} from \"openzeppelin/token/ERC20/ERC20.sol\";\n\n// forces forge to download the specified solc version\ncontract useSolcVersion is Script {\n    // returns true\n    function run() public view returns (bool) {\n        console.log(\"using 0.8.15\");\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/dev/util/Ascii.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\n/// @notice ascii functions\nlibrary Ascii {\n    /// @notice converts a uint256 to string\n    /// @param _value, uint256, the value to convert\n    /// @return result the resulting string\n    function encodeUint256(uint256 _value) internal pure returns (string memory result) {\n        if (_value == 0) return \"0\";\n\n        assembly {\n            // largest uint = 2^256-1 has 78 digits\n            // reserve 110 = 78 + 32 bytes of data in memory\n            // (first 32 are for string length)\n\n            // get 110 bytes of free memory\n            result := add(mload(0x40), 110)\n            mstore(0x40, result)\n\n            // keep track of digits\n            let digits := 0\n\n            for {} gt(_value, 0) {} {\n                // increment digits\n                digits := add(digits, 1)\n                // go back one byte\n                result := sub(result, 1)\n                // compute ascii char\n                let c := add(mod(_value, 10), 48)\n                // store byte\n                mstore8(result, c)\n                // advance to next digit\n                _value := div(_value, 10)\n            }\n            // go back 32 bytes\n            result := sub(result, 32)\n            // store the length\n            mstore(result, digits)\n        }\n    }\n\n    function encodeBytes(bytes memory _data) internal pure returns (string memory) {\n        if (_data.length == 0) return \"00\";\n        string memory table = \"0123456789abcdef\";\n        uint256 length = _data.length;\n        bytes memory result = new bytes(2 * length + 2);\n        assembly {\n            //\n            let resultPtr := add(result, 32)\n            //\n            let tablePtr := add(table, 1)\n            //\n            let dataPtr := add(_data, 1)\n\n            // write two bytes '0x' at most significant digits\n            // this is actually not necessary for ffi\n            mstore8(resultPtr, 48)\n            resultPtr := add(resultPtr, 1)\n            mstore8(resultPtr, 120)\n            resultPtr := add(resultPtr, 1)\n\n            for { let i := 0 } lt(i, length) { i := add(i, 1) } {\n                let c := mload(dataPtr)\n                // first 4 bits\n                let c1 := and(0x0f, shr(4, c))\n                // second 4 bits\n                let c2 := and(0x0f, c)\n\n                mstore8(resultPtr, mload(add(tablePtr, c1)))\n                resultPtr := add(resultPtr, 1)\n                mstore8(resultPtr, mload(add(tablePtr, c2)))\n                resultPtr := add(resultPtr, 1)\n\n                dataPtr := add(dataPtr, 1)\n            }\n        }\n        return string(result);\n    }\n}\n"
  },
  {
    "path": "src/dev/util/Deployer.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport {vm} from \"dev/util/vm.sol\";\nimport {Json} from \"dev/util/Json.sol\";\n\nlibrary Deployer {\n    function deployCode(string memory _what) internal returns (address addr) {\n        addr = deployCode(_what, \"\", \"\");\n    }\n\n    function deployCode(string memory _what, bytes memory _args, string memory _salt) internal returns (address addr) {\n        bytes memory bytecode = abi.encodePacked(vm.std_cheats.getCode(_what), _args);\n        assembly {\n            addr := create2(0, add(bytecode, 0x20), mload(bytecode), _salt)\n        }\n    }\n\n    function deployBytecode(bytes memory _initcode, bytes memory _args, string memory _salt)\n        internal\n        returns (address addr)\n    {\n        bytes memory bytecode = abi.encodePacked(_initcode, _args);\n        assembly {\n            addr := create2(0, add(bytecode, 0x20), mload(bytecode), _salt)\n        }\n    }\n\n    function ConditionalTokens() public returns (address) {\n        bytes memory initcode = Json.readData(\"artifacts/ConditionalTokens.json\", \".bytecode.object\");\n        return deployBytecode(initcode, \"\", \"\");\n    }\n}\n"
  },
  {
    "path": "src/dev/util/Io.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport {Test, console2 as console} from \"forge-std/Test.sol\";\nimport {vm} from \"./vm.sol\";\n\nlibrary Io {\n    string constant tempFolder = \"tmp\";\n\n    function read(string memory filePath) internal returns (bytes memory) {\n        string[] memory c = new string[](3);\n        c[0] = \"bash\";\n        c[1] = \"-c\";\n        c[2] = string.concat(\"cat \", filePath);\n\n        bytes memory result = vm.std_cheats.ffi(c);\n        return result;\n    }\n\n    function write(string memory filePath, string memory _content) internal {\n        _prepareTempFolder();\n        string[] memory c = new string[](3);\n        c[0] = \"bash\";\n        c[1] = \"-c\";\n        c[2] = string.concat(\"echo -n \", _content, \" > \", filePath);\n\n        vm.std_cheats.ffi(c);\n    }\n\n    function _prepareTempFolder() internal {\n        string[] memory c = new string[](3);\n        c[0] = \"bash\";\n        c[1] = \"-c\";\n        // c[2] = 'cast ae \"x(string)\" $(pwd)';\n        c[2] = \"mkdir -p tmp && echo -n 0x00\";\n        // c[0] = string.concat(\"mdkir -p \", tempFolder);\n\n        vm.std_cheats.ffi(c);\n    }\n}\n"
  },
  {
    "path": "src/dev/util/Json.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport {Test, console2 as console} from \"forge-std/Test.sol\";\nimport {vm} from \"./vm.sol\";\n\nlibrary Json {\n    function read(string memory _path, string memory _filter) internal returns (bytes memory) {\n        string[] memory c = new string[](3);\n        c[0] = \"bash\";\n        c[1] = \"-c\";\n        c[2] = string.concat('cast ae \"response(bytes)\" $(jq -j ', _filter, \" \", _path, \" | xxd -p)\");\n        // in general should dump with xxd -p (or whatever)\n        bytes memory data = vm.std_cheats.ffi(c);\n\n        return data;\n    }\n\n    function readData(string memory _path, string memory _filter) internal returns (bytes memory) {\n        string[] memory c = new string[](3);\n        c[0] = \"bash\";\n        c[1] = \"-c\";\n        c[2] = string.concat('cast ae \"response(bytes)\" $(jq -j ', _filter, \" \", _path, \")\");\n\n        bytes memory data = vm.std_cheats.ffi(c);\n        bytes memory result = abi.decode(data, (bytes));\n\n        return result;\n    }\n\n    // function write(string memory filePath, string memory data) internal {\n    //     string[] memory writeInputs = new string[](3);\n    //     writeInputs[0] = \"scripts/io_write.sh\";\n    //     writeInputs[1] = filePath;\n    //     writeInputs[2] = data;\n\n    //     vm.std_cheats.ffi(writeInputs);\n    // }\n}\n"
  },
  {
    "path": "src/dev/util/Log.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport {console} from \"forge-std/console.sol\";\nimport {vm} from \"dev/util/vm.sol\";\nimport {Ascii} from \"dev/util/Ascii.sol\";\n\nlibrary Log {\n    function logERC20(string memory label, uint256 value) internal {\n        string[] memory inputs = new string[](2);\n        inputs[0] = \"scripts/formatERC20.sh\";\n        inputs[1] = string(Ascii.encodeUint256(value));\n\n        string memory result = string(vm.std_cheats.ffi(inputs));\n        console.log(string.concat(label, \": \", result));\n    }\n\n    function logX96(string memory label, uint256 value) internal {\n        string[] memory inputs = new string[](2);\n        inputs[0] = \"scripts/formatX96.sh\";\n        inputs[1] = string(Ascii.encodeUint256(value));\n\n        string memory result = string(vm.std_cheats.ffi(inputs));\n        console.log(string.concat(label, \": \", result));\n    }\n}\n"
  },
  {
    "path": "src/dev/util/Predictor.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport {vm} from \"./vm.sol\";\nimport {Ascii} from \"./Ascii.sol\";\n\n// modified from https://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\nlibrary Predictor {\n    function addressFrom(address _origin, uint256 _nonce) public pure returns (address) {\n        if (_nonce == 0x00) return addressHash(abi.encodePacked(bytes1(0xd6), bytes1(0x94), _origin, bytes1(0x80)));\n        if (_nonce <= 0x7f) {\n            return addressHash(abi.encodePacked(bytes1(0xd6), bytes1(0x94), _origin, bytes1(uint8(_nonce))));\n        }\n        if (_nonce <= 0xff) {\n            return addressHash(abi.encodePacked(bytes1(0xd7), bytes1(0x94), _origin, bytes1(0x81), uint8(_nonce)));\n        }\n        if (_nonce <= 0xffff) {\n            return addressHash(abi.encodePacked(bytes1(0xd8), bytes1(0x94), _origin, bytes1(0x82), uint16(_nonce)));\n        }\n        if (_nonce <= 0xffffff) {\n            return addressHash(abi.encodePacked(bytes1(0xd9), bytes1(0x94), _origin, bytes1(0x83), uint24(_nonce)));\n        }\n        return addressHash(abi.encodePacked(bytes1(0xda), bytes1(0x94), _origin, bytes1(0x84), uint32(_nonce))); // more than 2^32 nonces not realisti);\n    }\n\n    function addressHash(bytes memory _digest) public pure returns (address) {\n        return address(uint160(uint256(keccak256(_digest))));\n    }\n}\n"
  },
  {
    "path": "src/dev/util/Reader.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport {vm} from \"./vm.sol\";\n\nlibrary Reader {\n    function read(string memory _path) internal returns (bytes memory) {\n        string[] memory c = new string[](3);\n        c[0] = \"bash\";\n        c[1] = \"-c\";\n        c[2] = string.concat('cast ae \"response(bytes)\" $(xxd -p ', _path, \")\");\n\n        bytes memory result = vm.std_cheats.ffi(c);\n        return result;\n    }\n\n    // function write(string memory filePath, string memory data) internal {\n    //     string[] memory writeInputs = new string[](3);\n    //     writeInputs[0] = \"scripts/io_write.sh\";\n    //     writeInputs[1] = filePath;\n    //     writeInputs[2] = data;\n\n    //     vm.std_cheats.ffi(writeInputs);\n    // }\n}\n"
  },
  {
    "path": "src/dev/util/script/prepareTempFolder.s.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport {Script, console2 as console} from \"forge-std/Script.sol\";\nimport {Io} from \"dev/util/Io.sol\";\n\n// forces forge to download the specified solc version\ncontract prepareTempFolder is Script {\n    // returns true\n    function run() public returns (bool) {\n        Io._prepareTempFolder();\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/dev/util/vm.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport {Vm} from \"forge-std/Vm.sol\";\n\nlibrary vm {\n    Vm constant std_cheats = Vm(0x7109709ECfa91a80626fF3989D68f67F5b1DD12D);\n}\n"
  },
  {
    "path": "src/exchange/BaseExchange.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { ERC1155Holder } from \"openzeppelin-contracts/token/ERC1155/utils/ERC1155Holder.sol\";\nimport { ReentrancyGuard } from \"common/ReentrancyGuard.sol\";\n\nabstract contract BaseExchange is ERC1155Holder, ReentrancyGuard { }\n"
  },
  {
    "path": "src/exchange/CTFExchange.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.15;\n\nimport { Auth } from \"./mixins/Auth.sol\";\nimport { Fees } from \"./mixins/Fees.sol\";\nimport { Assets } from \"./mixins/Assets.sol\";\nimport { Hashing } from \"./mixins/Hashing.sol\";\nimport { Trading } from \"./mixins/Trading.sol\";\nimport { Registry } from \"./mixins/Registry.sol\";\nimport { Pausable } from \"./mixins/Pausable.sol\";\nimport { Signatures } from \"./mixins/Signatures.sol\";\nimport { NonceManager } from \"./mixins/NonceManager.sol\";\nimport { AssetOperations } from \"./mixins/AssetOperations.sol\";\n\nimport { BaseExchange } from \"./BaseExchange.sol\";\n\nimport { Order } from \"./libraries/OrderStructs.sol\";\n\n/// @title CTF Exchange\n/// @notice Implements logic for trading CTF assets\n/// @author Polymarket\ncontract CTFExchange is\n    BaseExchange,\n    Auth,\n    Assets,\n    Fees,\n    Pausable,\n    AssetOperations,\n    Hashing(\"Polymarket CTF Exchange\", \"1\"),\n    NonceManager,\n    Registry,\n    Signatures,\n    Trading\n{\n    constructor(address _collateral, address _ctf, address _proxyFactory, address _safeFactory)\n        Assets(_collateral, _ctf)\n        Signatures(_proxyFactory, _safeFactory)\n    { }\n\n    /*//////////////////////////////////////////////////////////////\n                        PAUSE\n    //////////////////////////////////////////////////////////////*/\n\n    /// @notice Pause trading on the Exchange\n    function pauseTrading() external onlyAdmin {\n        _pauseTrading();\n    }\n\n    /// @notice Unpause trading on the Exchange\n    function unpauseTrading() external onlyAdmin {\n        _unpauseTrading();\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                        TRADING\n    //////////////////////////////////////////////////////////////*/\n\n    /// @notice Fills an order\n    /// @param order        - The order to be filled\n    /// @param fillAmount   - The amount to be filled, always in terms of the maker amount\n    function fillOrder(Order memory order, uint256 fillAmount) external nonReentrant onlyOperator notPaused {\n        _fillOrder(order, fillAmount, msg.sender);\n    }\n\n    /// @notice Fills a set of orders\n    /// @param orders       - The order to be filled\n    /// @param fillAmounts  - The amounts to be filled, always in terms of the maker amount\n    function fillOrders(Order[] memory orders, uint256[] memory fillAmounts)\n        external\n        nonReentrant\n        onlyOperator\n        notPaused\n    {\n        _fillOrders(orders, fillAmounts, msg.sender);\n    }\n\n    /// @notice Matches a taker order against a list of maker orders\n    /// @param takerOrder       - The active order to be matched\n    /// @param makerOrders      - The array of maker orders to be matched against the active order\n    /// @param takerFillAmount  - The amount to fill on the taker order, always in terms of the maker amount\n    /// @param makerFillAmounts - The array of amounts to fill on the maker orders, always in terms of the maker amount\n    function matchOrders(\n        Order memory takerOrder,\n        Order[] memory makerOrders,\n        uint256 takerFillAmount,\n        uint256[] memory makerFillAmounts\n    ) external nonReentrant onlyOperator notPaused {\n        _matchOrders(takerOrder, makerOrders, takerFillAmount, makerFillAmounts);\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                        CONFIGURATION\n    //////////////////////////////////////////////////////////////*/\n\n    /// @notice Sets a new Proxy Wallet factory for the Exchange\n    /// @param _newProxyFactory - The new Proxy Wallet factory\n    function setProxyFactory(address _newProxyFactory) external onlyAdmin {\n        _setProxyFactory(_newProxyFactory);\n    }\n\n    /// @notice Sets a new safe factory for the Exchange\n    /// @param _newSafeFactory  - The new Safe wallet factory\n    function setSafeFactory(address _newSafeFactory) external onlyAdmin {\n        _setSafeFactory(_newSafeFactory);\n    }\n\n    /// @notice Registers a tokenId, its complement and its conditionId for trading on the Exchange\n    /// @param token        - The tokenId being registered\n    /// @param complement   - The complement of the tokenId\n    /// @param conditionId  - The CTF conditionId\n    function registerToken(uint256 token, uint256 complement, bytes32 conditionId) external onlyAdmin {\n        _registerToken(token, complement, conditionId);\n    }\n}\n"
  },
  {
    "path": "src/exchange/interfaces/IAssetOperations.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nabstract contract IAssetOperations {\n    function _getBalance(uint256 tokenId) internal virtual returns (uint256);\n\n    function _transfer(address from, address to, uint256 id, uint256 value) internal virtual;\n\n    function _mint(bytes32 conditionId, uint256 amount) internal virtual;\n\n    function _merge(bytes32 conditionId, uint256 amount) internal virtual;\n}\n"
  },
  {
    "path": "src/exchange/interfaces/IAssets.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nabstract contract IAssets {\n    function getCollateral() public virtual returns (address);\n\n    function getCtf() public virtual returns (address);\n}\n"
  },
  {
    "path": "src/exchange/interfaces/IAuth.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\ninterface IAuthEE {\n    error NotAdmin();\n    error NotOperator();\n\n    /// @notice Emitted when a new admin is added\n    event NewAdmin(address indexed newAdminAddress, address indexed admin);\n\n    /// @notice Emitted when a new operator is added\n    event NewOperator(address indexed newOperatorAddress, address indexed admin);\n\n    /// @notice Emitted when an admin is removed\n    event RemovedAdmin(address indexed removedAdmin, address indexed admin);\n\n    /// @notice Emitted when an operator is removed\n    event RemovedOperator(address indexed removedOperator, address indexed admin);\n}\n\ninterface IAuth is IAuthEE {\n    function isAdmin(address) external view returns (bool);\n\n    function isOperator(address) external view returns (bool);\n\n    function addAdmin(address) external;\n\n    function addOperator(address) external;\n\n    function removeAdmin(address) external;\n\n    function removeOperator(address) external;\n\n    function renounceAdminRole() external;\n\n    function renounceOperatorRole() external;\n}\n"
  },
  {
    "path": "src/exchange/interfaces/IConditionalTokens.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { IERC20 } from \"openzeppelin-contracts/token/ERC20/IERC20.sol\";\n\n/// @title IConditionalTokens\n/// @notice Interface for the Gnosis ConditionalTokensFramework: https://github.com/gnosis/conditional-tokens-contracts/blob/master/contracts/ConditionalTokens.sol\ninterface IConditionalTokens {\n    function payoutNumerators(bytes32 conditionId, uint256 index) external view returns (uint256);\n\n    function payoutDenominator(bytes32 conditionId) external view returns (uint256);\n\n    /// @dev This function prepares a condition by initializing a payout vector associated with the condition.\n    /// @param oracle The account assigned to report the result for the prepared condition.\n    /// @param questionId An identifier for the question to be answered by the oracle.\n    /// @param outcomeSlotCount The number of outcome slots which should be used for this condition. Must not exceed 256.\n    function prepareCondition(address oracle, bytes32 questionId, uint256 outcomeSlotCount) external;\n\n    /// @dev Called by the oracle for reporting results of conditions. Will set the payout vector for the condition with the ID ``keccak256(abi.encodePacked(oracle, questionId, outcomeSlotCount))``, where oracle is the message sender, questionId is one of the parameters of this function, and outcomeSlotCount is the length of the payouts parameter, which contains the payoutNumerators for each outcome slot of the condition.\n    /// @param questionId The question ID the oracle is answering for\n    /// @param payouts The oracle's answer\n    function reportPayouts(bytes32 questionId, uint256[] calldata payouts) external;\n\n    /// @dev This function splits a position. If splitting from the collateral, this contract will attempt to transfer `amount` collateral from the message sender to itself. Otherwise, this contract will burn `amount` stake held by the message sender in the position being split worth of EIP 1155 tokens. Regardless, if successful, `amount` stake will be minted in the split target positions. If any of the transfers, mints, or burns fail, the transaction will revert. The transaction will also revert if the given partition is trivial, invalid, or refers to more slots than the condition is prepared with.\n    /// @param collateralToken The address of the positions' backing collateral token.\n    /// @param parentCollectionId The ID of the outcome collections common to the position being split and the split target positions. May be null, in which only the collateral is shared.\n    /// @param conditionId The ID of the condition to split on.\n    /// @param partition An array of disjoint index sets representing a nontrivial partition of the outcome slots of the given condition. E.g. A|B and C but not A|B and B|C (is not disjoint). Each element's a number which, together with the condition, represents the outcome collection. E.g. 0b110 is A|B, 0b010 is B, etc.\n    /// @param amount The amount of collateral or stake to split.\n    function splitPosition(\n        IERC20 collateralToken,\n        bytes32 parentCollectionId,\n        bytes32 conditionId,\n        uint256[] calldata partition,\n        uint256 amount\n    ) external;\n\n    /// @dev This function merges CTF tokens into the underlying collateral.\n    /// @param collateralToken The address of the positions' backing collateral token.\n    /// @param parentCollectionId The ID of the outcome collections common to the position being split and the split target positions. May be null, in which only the collateral is shared.\n    /// @param conditionId The ID of the condition to split on.\n    /// @param partition An array of disjoint index sets representing a nontrivial partition of the outcome slots of the given condition. E.g. A|B and C but not A|B and B|C (is not disjoint). Each element's a number which, together with the condition, represents the outcome collection. E.g. 0b110 is A|B, 0b010 is B, etc.\n    /// @param amount The amount of collateral or stake to split.\n    function mergePositions(\n        IERC20 collateralToken,\n        bytes32 parentCollectionId,\n        bytes32 conditionId,\n        uint256[] calldata partition,\n        uint256 amount\n    ) external;\n\n    /// @dev This function redeems a CTF ERC1155 token for the underlying collateral\n    /// @param collateralToken The address of the positions' backing collateral token.\n    /// @param parentCollectionId The ID of the outcome collections common to the position\n    /// @param conditionId The ID of the condition to split on.\n    /// @param indexSets Index sets of the outcome collection to combine with the parent outcome collection\n    function redeemPositions(\n        IERC20 collateralToken,\n        bytes32 parentCollectionId,\n        bytes32 conditionId,\n        uint256[] calldata indexSets\n    ) external;\n\n    /// @dev Gets the outcome slot count of a condition.\n    /// @param conditionId ID of the condition.\n    /// @return Number of outcome slots associated with a condition, or zero if condition has not been prepared yet.\n    function getOutcomeSlotCount(bytes32 conditionId) external view returns (uint256);\n\n    /// @dev Constructs a condition ID from an oracle, a question ID, and the outcome slot count for the question.\n    /// @param oracle The account assigned to report the result for the prepared condition.\n    /// @param questionId An identifier for the question to be answered by the oracle.\n    /// @param outcomeSlotCount The number of outcome slots which should be used for this condition. Must not exceed 256.\n    function getConditionId(address oracle, bytes32 questionId, uint256 outcomeSlotCount)\n        external\n        pure\n        returns (bytes32);\n\n    /// @dev Constructs an outcome collection ID from a parent collection and an outcome collection.\n    /// @param parentCollectionId Collection ID of the parent outcome collection, or bytes32(0) if there's no parent.\n    /// @param conditionId Condition ID of the outcome collection to combine with the parent outcome collection.\n    /// @param indexSet Index set of the outcome collection to combine with the parent outcome collection.\n    function getCollectionId(bytes32 parentCollectionId, bytes32 conditionId, uint256 indexSet)\n        external\n        view\n        returns (bytes32);\n\n    /// @dev Constructs a position ID from a collateral token and an outcome collection. These IDs are used as the ERC-1155 ID for this contract.\n    /// @param collateralToken Collateral token which backs the position.\n    /// @param collectionId ID of the outcome collection associated with this position.\n    function getPositionId(IERC20 collateralToken, bytes32 collectionId) external pure returns (uint256);\n}\n"
  },
  {
    "path": "src/exchange/interfaces/IFees.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\ninterface IFeesEE {\n    error FeeTooHigh();\n\n    /// @notice Emitted when a fee is charged\n    event FeeCharged(address indexed receiver, uint256 tokenId, uint256 amount);\n}\n\nabstract contract IFees is IFeesEE {\n    function getMaxFeeRate() public pure virtual returns (uint256);\n}\n"
  },
  {
    "path": "src/exchange/interfaces/IHashing.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { Order } from \"../libraries/OrderStructs.sol\";\n\nabstract contract IHashing {\n    function hashOrder(Order memory order) public view virtual returns (bytes32);\n}\n"
  },
  {
    "path": "src/exchange/interfaces/INonceManager.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nabstract contract INonceManager {\n    function incrementNonce() external virtual;\n\n    function isValidNonce(address user, uint256 userNonce) public view virtual returns (bool);\n}\n"
  },
  {
    "path": "src/exchange/interfaces/IPausable.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\ninterface IPausableEE {\n    error Paused();\n\n    event TradingPaused(address indexed pauser);\n\n    event TradingUnpaused(address indexed pauser);\n}\n\nabstract contract IPausable is IPausableEE {\n    function _pauseTrading() internal virtual;\n\n    function _unpauseTrading() internal virtual;\n}\n"
  },
  {
    "path": "src/exchange/interfaces/IRegistry.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\ninterface IRegistryEE {\n    error InvalidComplement();\n    error InvalidTokenId();\n    error AlreadyRegistered();\n\n    /// @notice Emitted when a token is registered\n    event TokenRegistered(uint256 indexed token0, uint256 indexed token1, bytes32 indexed conditionId);\n}\n\nabstract contract IRegistry is IRegistryEE {\n    function getConditionId(uint256 tokenId) public view virtual returns (bytes32);\n\n    function getComplement(uint256 tokenId) public view virtual returns (uint256);\n\n    function validateTokenId(uint256 tokenId) public view virtual;\n\n    function validateComplement(uint256 token0, uint256 token1) public view virtual;\n}\n"
  },
  {
    "path": "src/exchange/interfaces/ISignatures.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { Order } from \"../libraries/OrderStructs.sol\";\n\ninterface ISignaturesEE {\n    error InvalidSignature();\n}\n\nabstract contract ISignatures is ISignaturesEE {\n    function validateOrderSignature(bytes32 orderHash, Order memory order) public view virtual;\n}\n"
  },
  {
    "path": "src/exchange/interfaces/ITrading.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { OrderStatus, Order } from \"../libraries/OrderStructs.sol\";\n\ninterface ITradingEE {\n    error NotOwner();\n    error NotTaker();\n    error OrderFilledOrCancelled();\n    error OrderExpired();\n    error InvalidNonce();\n    error MakingGtRemaining();\n    error NotCrossing();\n    error TooLittleTokensReceived();\n    error MismatchedTokenIds();\n\n    /// @notice Emitted when an order is cancelled\n    event OrderCancelled(bytes32 indexed orderHash);\n\n    /// @notice Emitted when an order is filled\n    event OrderFilled(\n        bytes32 indexed orderHash,\n        address indexed maker,\n        address indexed taker,\n        uint256 makerAssetId,\n        uint256 takerAssetId,\n        uint256 makerAmountFilled,\n        uint256 takerAmountFilled,\n        uint256 fee\n    );\n\n    /// @notice Emitted when a set of orders is matched\n    event OrdersMatched(\n        bytes32 indexed takerOrderHash,\n        address indexed takerOrderMaker,\n        uint256 makerAssetId,\n        uint256 takerAssetId,\n        uint256 makerAmountFilled,\n        uint256 takerAmountFilled\n    );\n}\n\ninterface ITrading is ITradingEE { }\n"
  },
  {
    "path": "src/exchange/libraries/CalculatorHelper.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { Order, Side } from \"../libraries/OrderStructs.sol\";\n\nlibrary CalculatorHelper {\n    uint256 internal constant ONE = 10 ** 18;\n\n    uint256 internal constant BPS_DIVISOR = 10_000;\n\n    function calculateTakingAmount(uint256 makingAmount, uint256 makerAmount, uint256 takerAmount)\n        internal\n        pure\n        returns (uint256)\n    {\n        if (makerAmount == 0) return 0;\n        return makingAmount * takerAmount / makerAmount;\n    }\n\n    /// @notice Calculates the fee for an order\n    /// @dev Fees are calculated based on amount of outcome tokens and the order's feeRate\n    /// @param feeRateBps       - Fee rate, in basis points\n    /// @param outcomeTokens    - The number of outcome tokens\n    /// @param makerAmount      - The maker amount of the order\n    /// @param takerAmount      - The taker amount of the order\n    /// @param side             - The side of the order\n    function calculateFee(\n        uint256 feeRateBps,\n        uint256 outcomeTokens,\n        uint256 makerAmount,\n        uint256 takerAmount,\n        Side side\n    ) internal pure returns (uint256 fee) {\n        if (feeRateBps > 0) {\n            uint256 price = _calculatePrice(makerAmount, takerAmount, side);\n            if (price > 0 && price <= ONE) {\n                if (side == Side.BUY) {\n                    // Fee charged on Token Proceeds:\n                    // baseRate * min(price, 1-price) * (outcomeTokens/price)\n                    fee = (feeRateBps * min(price, ONE - price) * outcomeTokens) / (price * BPS_DIVISOR);\n                } else {\n                    // Fee charged on Collateral proceeds:\n                    // baseRate * min(price, 1-price) * outcomeTokens\n                    fee = feeRateBps * min(price, ONE - price) * outcomeTokens / (BPS_DIVISOR * ONE);\n                }\n            }\n        }\n    }\n\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\n        return a < b ? a : b;\n    }\n\n    function calculatePrice(Order memory order) internal pure returns (uint256) {\n        return _calculatePrice(order.makerAmount, order.takerAmount, order.side);\n    }\n\n    function _calculatePrice(uint256 makerAmount, uint256 takerAmount, Side side) internal pure returns (uint256) {\n        if (side == Side.BUY) return takerAmount != 0 ? makerAmount * ONE / takerAmount : 0;\n        return makerAmount != 0 ? takerAmount * ONE / makerAmount : 0;\n    }\n\n    function isCrossing(Order memory a, Order memory b) internal pure returns (bool) {\n        if (a.takerAmount == 0 || b.takerAmount == 0) return true;\n\n        return _isCrossing(calculatePrice(a), calculatePrice(b), a.side, b.side);\n    }\n\n    function _isCrossing(uint256 priceA, uint256 priceB, Side sideA, Side sideB) internal pure returns (bool) {\n        if (sideA == Side.BUY) {\n            if (sideB == Side.BUY) {\n                // if a and b are bids\n                return priceA + priceB >= ONE;\n            }\n            // if a is bid and b is ask\n            return priceA >= priceB;\n        }\n        if (sideB == Side.BUY) {\n            // if a is ask and b is bid\n            return priceB >= priceA;\n        }\n        // if a and b are asks\n        return priceA + priceB <= ONE;\n    }\n}\n"
  },
  {
    "path": "src/exchange/libraries/OrderStructs.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nbytes32 constant ORDER_TYPEHASH = keccak256(\n    \"Order(uint256 salt,address maker,address signer,address taker,uint256 tokenId,uint256 makerAmount,uint256 takerAmount,uint256 expiration,uint256 nonce,uint256 feeRateBps,uint8 side,uint8 signatureType)\"\n);\n\nstruct Order {\n    /// @notice Unique salt to ensure entropy\n    uint256 salt;\n    /// @notice Maker of the order, i.e the source of funds for the order\n    address maker;\n    /// @notice Signer of the order\n    address signer;\n    /// @notice Address of the order taker. The zero address is used to indicate a public order\n    address taker;\n    /// @notice Token Id of the CTF ERC1155 asset to be bought or sold\n    /// If BUY, this is the tokenId of the asset to be bought, i.e the makerAssetId\n    /// If SELL, this is the tokenId of the asset to be sold, i.e the takerAssetId\n    uint256 tokenId;\n    /// @notice Maker amount, i.e the maximum amount of tokens to be sold\n    uint256 makerAmount;\n    /// @notice Taker amount, i.e the minimum amount of tokens to be received\n    uint256 takerAmount;\n    /// @notice Timestamp after which the order is expired\n    uint256 expiration;\n    /// @notice Nonce used for onchain cancellations\n    uint256 nonce;\n    /// @notice Fee rate, in basis points, charged to the order maker, charged on proceeds\n    uint256 feeRateBps;\n    /// @notice The side of the order: BUY or SELL\n    Side side;\n    /// @notice Signature type used by the Order: EOA, POLY_PROXY or POLY_GNOSIS_SAFE\n    SignatureType signatureType;\n    /// @notice The order signature\n    bytes signature;\n}\n\nenum SignatureType {\n    // 0: ECDSA EIP712 signatures signed by EOAs\n    EOA,\n    // 1: EIP712 signatures signed by EOAs that own Polymarket Proxy wallets\n    POLY_PROXY,\n    // 2: EIP712 signatures signed by EOAs that own Polymarket Gnosis safes\n    POLY_GNOSIS_SAFE,\n    // 3: EIP1271 signatures signed by smart contracts. To be used by smart contract wallets or vaults\n    POLY_1271\n}\n\nenum Side {\n    // 0: buy\n    BUY,\n    // 1: sell\n    SELL\n}\n\nenum MatchType {\n    // 0: buy vs sell\n    COMPLEMENTARY,\n    // 1: both buys\n    MINT,\n    // 2: both sells\n    MERGE\n}\n\nstruct OrderStatus {\n    bool isFilledOrCancelled;\n    uint256 remaining;\n}\n"
  },
  {
    "path": "src/exchange/libraries/PolyProxyLib.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\n/// @notice Helper library to compute polymarket proxy wallet addresses\nlibrary PolyProxyLib {\n    /// @notice Gets the polymarket proxy address for a signer\n    /// @param signer - Address of the signer\n    function getProxyWalletAddress(address signer, address implementation, address deployer)\n        internal\n        pure\n        returns (address proxyWallet)\n    {\n        return _computeCreate2Address(deployer, implementation, keccak256(abi.encodePacked(signer)));\n    }\n\n    function _computeCreate2Address(address from, address target, bytes32 salt) internal pure returns (address) {\n        bytes32 bytecodeHash = keccak256(_computeCreationCode(from, target));\n        bytes32 _data = keccak256(abi.encodePacked(bytes1(0xff), from, salt, bytecodeHash));\n        return address(uint160(uint256(_data)));\n    }\n\n    function _computeCreationCode(address deployer, address target) internal pure returns (bytes memory clone) {\n        bytes memory consData = abi.encodeWithSignature(\"cloneConstructor(bytes)\", new bytes(0));\n        bytes memory buffer = new bytes(99);\n        assembly {\n            mstore(add(buffer, 0x20), 0x3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe)\n            mstore(add(buffer, 0x2d), mul(deployer, 0x01000000000000000000000000))\n            mstore(add(buffer, 0x41), 0x5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be)\n            mstore(add(buffer, 0x60), mul(target, 0x01000000000000000000000000))\n            mstore(add(buffer, 116), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n        }\n        // clone = bytes.concat(buffer, consData);\n        clone = abi.encodePacked(buffer, consData);\n        return clone;\n    }\n}\n"
  },
  {
    "path": "src/exchange/libraries/PolySafeLib.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\n/// @title PolySafeLib\n/// @notice Helper library to compute Polymarket gnosis safe addresses\nlibrary PolySafeLib {\n    bytes private constant proxyCreationCode =\n        hex\"608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea264697066735822122015938e3bf2c49f5df5c1b7f9569fa85cc5d6f3074bb258a2dc0c7e299bc9e33664736f6c63430008040033\";\n\n    /// @notice Gets the Polymarket Gnosis safe address for a signer\n    /// @param signer   - Address of the signer\n    /// @param deployer - Address of the deployer contract\n    function getSafeAddress(address signer, address implementation, address deployer)\n        internal\n        pure\n        returns (address safe)\n    {\n        bytes32 bytecodeHash = keccak256(getContractBytecode(implementation));\n        bytes32 salt = keccak256(abi.encode(signer));\n        safe = _computeCreate2Address(deployer, bytecodeHash, salt);\n    }\n\n    function getContractBytecode(address masterCopy) internal pure returns (bytes memory) {\n        return abi.encodePacked(proxyCreationCode, abi.encode(masterCopy));\n    }\n\n    function _computeCreate2Address(address deployer, bytes32 bytecodeHash, bytes32 salt)\n        internal\n        pure\n        returns (address)\n    {\n        bytes32 _data = keccak256(abi.encodePacked(bytes1(0xff), deployer, salt, bytecodeHash));\n        return address(uint160(uint256(_data)));\n    }\n}\n"
  },
  {
    "path": "src/exchange/libraries/TransferHelper.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { IERC1155 } from \"openzeppelin-contracts/token/ERC1155/IERC1155.sol\";\n\nimport { SafeTransferLib, ERC20 } from \"common/libraries/SafeTransferLib.sol\";\n\n/// @title TransferHelper\n/// @notice Helper method to transfer tokens\nlibrary TransferHelper {\n    /// @notice Transfers tokens from msg.sender to a recipient\n    /// @param token    - The contract address of the token which will be transferred\n    /// @param to       - The recipient of the transfer\n    /// @param amount   - The amount to be transferred\n    function _transferERC20(address token, address to, uint256 amount) internal {\n        SafeTransferLib.safeTransfer(ERC20(token), to, amount);\n    }\n\n    /// @notice Transfers tokens from the targeted address to the given destination\n    /// @param token    - The contract address of the token to be transferred\n    /// @param from     - The originating address from which the tokens will be transferred\n    /// @param to       - The destination address of the transfer\n    /// @param amount   - The amount to be transferred\n    function _transferFromERC20(address token, address from, address to, uint256 amount) internal {\n        SafeTransferLib.safeTransferFrom(ERC20(token), from, to, amount);\n    }\n\n    /// @notice Transfer an ERC1155 token\n    /// @param token    - The contract address of the token to be transferred\n    /// @param from     - The originating address from which the tokens will be transferred\n    /// @param to       - The destination address of the transfer\n    /// @param id       - The tokenId of the token to be transferred\n    /// @param amount   - The amount to be transferred\n    function _transferFromERC1155(address token, address from, address to, uint256 id, uint256 amount) internal {\n        IERC1155(token).safeTransferFrom(from, to, id, amount, \"\");\n    }\n\n    /// @notice Transfers a set of ERC1155 tokens\n    /// @param token    - The contract address of the token to be transferred\n    /// @param from     - The originating address from which the tokens will be transferred\n    /// @param to       - The destination address of the transfer\n    /// @param ids      - The tokenId of the token to be transferred\n    /// @param amounts  - The amount to be transferred\n    function _batchTransferFromERC1155(\n        address token,\n        address from,\n        address to,\n        uint256[] memory ids,\n        uint256[] memory amounts\n    ) internal {\n        IERC1155(token).safeBatchTransferFrom(from, to, ids, amounts, \"\");\n    }\n}\n"
  },
  {
    "path": "src/exchange/mixins/AssetOperations.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { IERC20 } from \"openzeppelin-contracts/token/ERC20/IERC20.sol\";\nimport { IERC1155 } from \"openzeppelin-contracts/token/ERC1155/IERC1155.sol\";\n\nimport { IAssets } from \"../interfaces/IAssets.sol\";\nimport { IAssetOperations } from \"../interfaces/IAssetOperations.sol\";\nimport { IConditionalTokens } from \"../interfaces/IConditionalTokens.sol\";\n\nimport { TransferHelper } from \"../libraries/TransferHelper.sol\";\n\n/// @title Asset Operations\n/// @notice Operations on the CTF and Collateral assets\nabstract contract AssetOperations is IAssetOperations, IAssets {\n    bytes32 public constant parentCollectionId = bytes32(0);\n\n    function _getBalance(uint256 tokenId) internal override returns (uint256) {\n        if (tokenId == 0) return IERC20(getCollateral()).balanceOf(address(this));\n        return IERC1155(getCtf()).balanceOf(address(this), tokenId);\n    }\n\n    function _transfer(address from, address to, uint256 id, uint256 value) internal override {\n        if (id == 0) return _transferCollateral(from, to, value);\n        return _transferCTF(from, to, id, value);\n    }\n\n    function _transferCollateral(address from, address to, uint256 value) internal {\n        address token = getCollateral();\n        if (from == address(this)) TransferHelper._transferERC20(token, to, value);\n        else TransferHelper._transferFromERC20(token, from, to, value);\n    }\n\n    function _transferCTF(address from, address to, uint256 id, uint256 value) internal {\n        TransferHelper._transferFromERC1155(getCtf(), from, to, id, value);\n    }\n\n    function _mint(bytes32 conditionId, uint256 amount) internal override {\n        uint256[] memory partition = new uint256[](2);\n        partition[0] = 1;\n        partition[1] = 2;\n        IConditionalTokens(getCtf()).splitPosition(\n            IERC20(getCollateral()), parentCollectionId, conditionId, partition, amount\n        );\n    }\n\n    function _merge(bytes32 conditionId, uint256 amount) internal override {\n        uint256[] memory partition = new uint256[](2);\n        partition[0] = 1;\n        partition[1] = 2;\n\n        IConditionalTokens(getCtf()).mergePositions(\n            IERC20(getCollateral()), parentCollectionId, conditionId, partition, amount\n        );\n    }\n}\n"
  },
  {
    "path": "src/exchange/mixins/Assets.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { IERC20 } from \"openzeppelin-contracts/token/ERC20/IERC20.sol\";\n\nimport { IAssets } from \"../interfaces/IAssets.sol\";\n\nabstract contract Assets is IAssets {\n    address internal immutable collateral;\n    address internal immutable ctf;\n\n    constructor(address _collateral, address _ctf) {\n        collateral = _collateral;\n        ctf = _ctf;\n        IERC20(collateral).approve(ctf, type(uint256).max);\n    }\n\n    function getCollateral() public view override returns (address) {\n        return collateral;\n    }\n\n    function getCtf() public view override returns (address) {\n        return ctf;\n    }\n}\n"
  },
  {
    "path": "src/exchange/mixins/Auth.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { IAuth } from \"../interfaces/IAuth.sol\";\n\n/// @title Auth\n/// @notice Provides admin and operator roles and access control modifiers\nabstract contract Auth is IAuth {\n    /// @dev The set of addresses authorized as Admins\n    mapping(address => uint256) public admins;\n\n    /// @dev The set of addresses authorized as Operators\n    mapping(address => uint256) public operators;\n\n    modifier onlyAdmin() {\n        if (admins[msg.sender] != 1) revert NotAdmin();\n        _;\n    }\n\n    modifier onlyOperator() {\n        if (operators[msg.sender] != 1) revert NotOperator();\n        _;\n    }\n\n    constructor() {\n        admins[msg.sender] = 1;\n        operators[msg.sender] = 1;\n    }\n\n    function isAdmin(address usr) external view returns (bool) {\n        return admins[usr] == 1;\n    }\n\n    function isOperator(address usr) external view returns (bool) {\n        return operators[usr] == 1;\n    }\n\n    /// @notice Adds a new admin\n    /// Can only be called by a current admin\n    /// @param admin_ - The new admin\n    function addAdmin(address admin_) external onlyAdmin {\n        admins[admin_] = 1;\n        emit NewAdmin(admin_, msg.sender);\n    }\n\n    /// @notice Adds a new operator\n    /// Can only be called by a current admin\n    /// @param operator_ - The new operator\n    function addOperator(address operator_) external onlyAdmin {\n        operators[operator_] = 1;\n        emit NewOperator(operator_, msg.sender);\n    }\n\n    /// @notice Removes an existing Admin\n    /// Can only be called by a current admin\n    /// @param admin - The admin to be removed\n    function removeAdmin(address admin) external onlyAdmin {\n        admins[admin] = 0;\n        emit RemovedAdmin(admin, msg.sender);\n    }\n\n    /// @notice Removes an existing operator\n    /// Can only be called by a current admin\n    /// @param operator - The operator to be removed\n    function removeOperator(address operator) external onlyAdmin {\n        operators[operator] = 0;\n        emit RemovedOperator(operator, msg.sender);\n    }\n\n    /// @notice Removes the admin role for the caller\n    /// Can only be called by an existing admin\n    function renounceAdminRole() external onlyAdmin {\n        admins[msg.sender] = 0;\n        emit RemovedAdmin(msg.sender, msg.sender);\n    }\n\n    /// @notice Removes the operator role for the caller\n    /// Can only be called by an exiting operator\n    function renounceOperatorRole() external onlyOperator {\n        operators[msg.sender] = 0;\n        emit RemovedOperator(msg.sender, msg.sender);\n    }\n}\n"
  },
  {
    "path": "src/exchange/mixins/Fees.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { IFees } from \"../interfaces/IFees.sol\";\n\nabstract contract Fees is IFees {\n    /// @notice Maximum fee rate that can be signed into an Order\n    uint256 internal constant MAX_FEE_RATE_BIPS = 1000; // 1000 bips or 10%\n\n    /// @notice Returns the maximum fee rate for an order\n    function getMaxFeeRate() public pure override returns (uint256) {\n        return MAX_FEE_RATE_BIPS;\n    }\n}\n"
  },
  {
    "path": "src/exchange/mixins/Hashing.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { EIP712 } from \"openzeppelin-contracts/utils/cryptography/draft-EIP712.sol\";\n\nimport { IHashing } from \"../interfaces/IHashing.sol\";\n\nimport { Order, ORDER_TYPEHASH } from \"../libraries/OrderStructs.sol\";\n\nabstract contract Hashing is EIP712, IHashing {\n    bytes32 public immutable domainSeparator;\n\n    constructor(string memory name, string memory version) EIP712(name, version) {\n        domainSeparator = _domainSeparatorV4();\n    }\n\n    /// @notice Computes the hash for an order\n    /// @param order - The order to be hashed\n    function hashOrder(Order memory order) public view override returns (bytes32) {\n        return _hashTypedDataV4(\n            keccak256(\n                abi.encode(\n                    ORDER_TYPEHASH,\n                    order.salt,\n                    order.maker,\n                    order.signer,\n                    order.taker,\n                    order.tokenId,\n                    order.makerAmount,\n                    order.takerAmount,\n                    order.expiration,\n                    order.nonce,\n                    order.feeRateBps,\n                    order.side,\n                    order.signatureType\n                )\n            )\n        );\n    }\n}\n"
  },
  {
    "path": "src/exchange/mixins/NonceManager.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { INonceManager } from \"../interfaces/INonceManager.sol\";\n\nabstract contract NonceManager is INonceManager {\n    mapping(address => uint256) public nonces;\n\n    function incrementNonce() external override {\n        updateNonce(1);\n    }\n\n    function updateNonce(uint256 val) internal {\n        nonces[ msg.sender] = nonces[ msg.sender] + val;\n    }\n\n    function isValidNonce(address usr, uint256 nonce) public view override returns (bool) {\n        return nonces[ usr] == nonce;\n    }\n}\n"
  },
  {
    "path": "src/exchange/mixins/Pausable.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { IPausable } from \"../interfaces/IPausable.sol\";\n\nabstract contract Pausable is IPausable {\n    bool public paused = false;\n\n    modifier notPaused() {\n        if (paused) revert Paused();\n        _;\n    }\n\n    function _pauseTrading() internal override {\n        paused = true;\n        emit TradingPaused(msg.sender);\n    }\n\n    function _unpauseTrading() internal override {\n        paused = false;\n        emit TradingUnpaused(msg.sender);\n    }\n}\n"
  },
  {
    "path": "src/exchange/mixins/PolyFactoryHelper.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { PolySafeLib } from \"../libraries/PolySafeLib.sol\";\nimport { PolyProxyLib } from \"../libraries/PolyProxyLib.sol\";\n\ninterface IPolyProxyFactory {\n    function getImplementation() external view returns (address);\n}\n\ninterface IPolySafeFactory {\n    function masterCopy() external view returns (address);\n}\n\nabstract contract PolyFactoryHelper {\n    /// @notice The Polymarket Proxy Wallet Factory Contract\n    address public proxyFactory;\n    /// @notice The Polymarket Gnosis Safe Factory Contract\n    address public safeFactory;\n\n    event ProxyFactoryUpdated(address indexed oldProxyFactory, address indexed newProxyFactory);\n\n    event SafeFactoryUpdated(address indexed oldSafeFactory, address indexed newSafeFactory);\n\n    constructor(address _proxyFactory, address _safeFactory) {\n        proxyFactory = _proxyFactory;\n        safeFactory = _safeFactory;\n    }\n\n    /// @notice Gets the Proxy factory address\n    function getProxyFactory() public view returns (address) {\n        return proxyFactory;\n    }\n\n    /// @notice Gets the Safe factory address\n    function getSafeFactory() public view returns (address) {\n        return safeFactory;\n    }\n\n    /// @notice Gets the Polymarket Proxy factory implementation address\n    function getPolyProxyFactoryImplementation() public view returns (address) {\n        return IPolyProxyFactory(proxyFactory).getImplementation();\n    }\n\n    /// @notice Gets the Safe factory implementation address\n    function getSafeFactoryImplementation() public view returns (address) {\n        return IPolySafeFactory(safeFactory).masterCopy();\n    }\n\n    /// @notice Gets the Polymarket proxy wallet address for an address\n    /// @param _addr    - The address that owns the proxy wallet\n    function getPolyProxyWalletAddress(address _addr) public view returns (address) {\n        return PolyProxyLib.getProxyWalletAddress(_addr, getPolyProxyFactoryImplementation(), proxyFactory);\n    }\n\n    /// @notice Gets the Polymarket Gnosis Safe address for an address\n    /// @param _addr    - The address that owns the proxy wallet\n    function getSafeAddress(address _addr) public view returns (address) {\n        return PolySafeLib.getSafeAddress(_addr, getSafeFactoryImplementation(), safeFactory);\n    }\n\n    function _setProxyFactory(address _proxyFactory) internal {\n        emit ProxyFactoryUpdated(proxyFactory, _proxyFactory);\n        proxyFactory = _proxyFactory;\n    }\n\n    function _setSafeFactory(address _safeFactory) internal {\n        emit SafeFactoryUpdated(safeFactory, _safeFactory);\n        safeFactory = _safeFactory;\n    }\n}\n"
  },
  {
    "path": "src/exchange/mixins/Registry.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { IRegistry } from \"../interfaces/IRegistry.sol\";\n\nstruct OutcomeToken {\n    uint256 complement;\n    bytes32 conditionId;\n}\n\n/// @title Registry\nabstract contract Registry is IRegistry {\n    mapping(uint256 => OutcomeToken) public registry;\n\n    /// @notice Gets the conditionId from a tokenId\n    /// @param token    - The token\n    function getConditionId(uint256 token) public view override returns (bytes32) {\n        return registry[ token].conditionId;\n    }\n\n    /// @notice Gets the complement of a tokenId\n    /// @param token    - The token\n    function getComplement(uint256 token) public view override returns (uint256) {\n        validateTokenId(token);\n        return registry[ token].complement;\n    }\n\n    /// @notice Validates the complement of a tokenId\n    /// @param token        - The tokenId\n    /// @param complement   - The complement to be validated\n    function validateComplement(uint256 token, uint256 complement) public view override {\n        if (getComplement(token) != complement) revert InvalidComplement();\n    }\n    /// @notice Validates that a tokenId is registered\n    /// @param tokenId - The tokenId\n\n    function validateTokenId(uint256 tokenId) public view override {\n        if (registry[ tokenId].complement == 0) revert InvalidTokenId();\n    }\n\n    function _registerToken(uint256 token0, uint256 token1, bytes32 conditionId) internal {\n        if (token0 == token1 || (token0 == 0 || token1 == 0)) revert InvalidTokenId();\n        if (registry[ token0].complement != 0 || registry[ token1].complement != 0) revert AlreadyRegistered();\n\n        registry[ token0] = OutcomeToken({complement: token1, conditionId: conditionId});\n\n        registry[ token1] = OutcomeToken({complement: token0, conditionId: conditionId});\n\n        emit TokenRegistered(token0, token1, conditionId);\n        emit TokenRegistered(token1, token0, conditionId);\n    }\n}\n"
  },
  {
    "path": "src/exchange/mixins/Signatures.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.10;\n\nimport { SignatureCheckerLib } from \"solady/utils/SignatureCheckerLib.sol\";\nimport { ECDSA } from \"openzeppelin-contracts/utils/cryptography/ECDSA.sol\";\n\nimport { SignatureType, Order } from \"../libraries/OrderStructs.sol\";\n\nimport { ISignatures } from \"../interfaces/ISignatures.sol\";\n\nimport { PolyFactoryHelper } from \"./PolyFactoryHelper.sol\";\n\n/// @title Signatures\n/// @notice Maintains logic that defines the various signature types and validates them\nabstract contract Signatures is ISignatures, PolyFactoryHelper {\n    constructor(address _proxyFactory, address _safeFactory) PolyFactoryHelper(_proxyFactory, _safeFactory) { }\n\n    /// @notice Validates the signature of an order\n    /// @param orderHash - The hash of the order\n    /// @param order     - The order\n    function validateOrderSignature(bytes32 orderHash, Order memory order) public view override {\n        if (!isValidSignature(order.signer, order.maker, orderHash, order.signature, order.signatureType)) {\n            revert InvalidSignature();\n        }\n    }\n\n    /// @notice Verifies a signature for signed Order structs\n    /// @param signer           - Address of the signer\n    /// @param associated       - Address associated with the signer.\n    ///                           For signature type EOA, this MUST be the same as the signer address.\n    ///                           For signature types POLY_PROXY and POLY_GNOSIS_SAFE, this is the address of the proxy\n    ///                           or the safe\n    ///                           For signature type POLY_1271, this is the address of the contract\n    /// @param structHash       - The hash of the struct being verified\n    /// @param signature        - The signature to be verified\n    /// @param signatureType    - The signature type to be verified\n    function isValidSignature(\n        address signer,\n        address associated,\n        bytes32 structHash,\n        bytes memory signature,\n        SignatureType signatureType\n    ) internal view returns (bool) {\n        if (signatureType == SignatureType.EOA) {\n            // EOA\n            return verifyEOASignature(signer, associated, structHash, signature);\n        } else if (signatureType == SignatureType.POLY_GNOSIS_SAFE) {\n            // POLY_GNOSIS_SAFE\n            return verifyPolySafeSignature(signer, associated, structHash, signature);\n        } else if (signatureType == SignatureType.POLY_1271) {\n            // POLY_1271\n            return verifyPoly1271Signature(signer, associated, structHash, signature);\n        } else {\n            // POLY_PROXY\n            return verifyPolyProxySignature(signer, associated, structHash, signature);\n        }\n    }\n\n    /// @notice Verifies an EOA ECDSA signature\n    /// Verifies that:\n    /// 1) the signature is valid\n    /// 2) the signer and maker are the same\n    /// @param signer      - The address of the signer\n    /// @param maker       - The address of the maker\n    /// @param structHash  - The hash of the struct being verified\n    /// @param signature   - The signature to be verified\n    function verifyEOASignature(address signer, address maker, bytes32 structHash, bytes memory signature)\n        internal\n        pure\n        returns (bool)\n    {\n        return (signer == maker) && verifyECDSASignature(signer, structHash, signature);\n    }\n\n    /// @notice Verifies an ECDSA signature\n    /// @dev Reverts if the signature length is invalid or the recovered signer is the zero address\n    /// @param signer      - Address of the signer\n    /// @param structHash  - The hash of the struct being verified\n    /// @param signature   - The signature to be verified\n    function verifyECDSASignature(address signer, bytes32 structHash, bytes memory signature)\n        internal\n        pure\n        returns (bool)\n    {\n        return ECDSA.recover(structHash, signature) == signer;\n    }\n\n    /// @notice Verifies a signature signed by a Polymarket proxy wallet\n    // Verifies that:\n    // 1) the ECDSA signature is valid\n    // 2) the Proxy wallet is owned by the signer\n    /// @param signer       - Address of the signer\n    /// @param proxyWallet  - Address of the poly proxy wallet\n    /// @param structHash   - Hash of the struct being verified\n    /// @param signature    - Signature to be verified\n    function verifyPolyProxySignature(address signer, address proxyWallet, bytes32 structHash, bytes memory signature)\n        internal\n        view\n        returns (bool)\n    {\n        return verifyECDSASignature(signer, structHash, signature) && getPolyProxyWalletAddress(signer) == proxyWallet;\n    }\n\n    /// @notice Verifies a signature signed by a Polymarket Gnosis safe\n    // Verifies that:\n    // 1) the ECDSA signature is valid\n    // 2) the Safe is owned by the signer\n    /// @param signer      - Address of the signer\n    /// @param safeAddress - Address of the safe\n    /// @param hash        - Hash of the struct being verified\n    /// @param signature   - Signature to be verified\n    function verifyPolySafeSignature(address signer, address safeAddress, bytes32 hash, bytes memory signature)\n        internal\n        view\n        returns (bool)\n    {\n        return verifyECDSASignature(signer, hash, signature) && getSafeAddress(signer) == safeAddress;\n    }\n\n    /// @notice Verifies a signature signed by a smart contract\n    /// @param signer           - Address of the 1271 smart contract\n    /// @param maker            - Address of the 1271 smart contract\n    /// @param hash             - Hash of the struct being verified\n    /// @param signature        - Signature to be verified\n    function verifyPoly1271Signature(address signer, address maker, bytes32 hash, bytes memory signature)\n        internal\n        view\n        returns (bool)\n    {\n        return (signer == maker) && maker.code.length > 0\n            && SignatureCheckerLib.isValidSignatureNow(maker, hash, signature);\n    }\n}\n"
  },
  {
    "path": "src/exchange/mixins/Trading.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { IFees } from \"../interfaces/IFees.sol\";\nimport { IHashing } from \"../interfaces/IHashing.sol\";\nimport { ITrading } from \"../interfaces/ITrading.sol\";\nimport { IRegistry } from \"../interfaces/IRegistry.sol\";\nimport { ISignatures } from \"../interfaces/ISignatures.sol\";\nimport { INonceManager } from \"../interfaces/INonceManager.sol\";\nimport { IAssetOperations } from \"../interfaces/IAssetOperations.sol\";\n\nimport { CalculatorHelper } from \"../libraries/CalculatorHelper.sol\";\nimport { Order, Side, MatchType, OrderStatus } from \"../libraries/OrderStructs.sol\";\n\n/// @title Trading\n/// @notice Implements logic for trading CTF assets\nabstract contract Trading is IFees, ITrading, IHashing, IRegistry, ISignatures, INonceManager, IAssetOperations {\n    /// @notice Mapping of orders to their current status\n    mapping(bytes32 => OrderStatus) public orderStatus;\n\n    /// @notice Gets the status of an order\n    /// @param orderHash    - The hash of the order\n    function getOrderStatus(bytes32 orderHash) public view returns (OrderStatus memory) {\n        return orderStatus[ orderHash];\n    }\n\n    /// @notice Validates an order\n    /// @notice order - The order to be validated\n    function validateOrder(Order memory order) public view {\n        bytes32 orderHash = hashOrder(order);\n        _validateOrder(orderHash, order);\n    }\n\n    /// @notice Cancels an order\n    /// An order can only be cancelled by its maker, the address which holds funds for the order\n    /// @notice order - The order to be cancelled\n    function cancelOrder(Order memory order) external {\n        _cancelOrder(order);\n    }\n\n    /// @notice Cancels a set of orders\n    /// @notice orders - The set of orders to be cancelled\n    function cancelOrders(Order[] memory orders) external {\n        uint256 length = orders.length;\n        uint256 i = 0;\n        for (; i < length;) {\n            _cancelOrder(orders[ i]);\n            unchecked {\n                ++i;\n            }\n        }\n    }\n\n    function _cancelOrder(Order memory order) internal {\n        if (order.maker != msg.sender) revert NotOwner();\n\n        bytes32 orderHash = hashOrder(order);\n        OrderStatus storage status = orderStatus[orderHash];\n        if (status.isFilledOrCancelled) revert OrderFilledOrCancelled();\n\n        status.isFilledOrCancelled = true;\n        emit OrderCancelled(orderHash);\n    }\n\n    function _validateOrder(bytes32 orderHash, Order memory order) internal view {\n        // Validate order expiration\n        if (order.expiration > 0 && order.expiration < block.timestamp) revert OrderExpired();\n\n        // Validate signature\n        validateOrderSignature(orderHash, order);\n\n        // Validate fee\n        if (order.feeRateBps > getMaxFeeRate()) revert FeeTooHigh();\n\n        // Validate the token to be traded\n        validateTokenId(order.tokenId);\n\n        // Validate that the order can be filled\n        if (orderStatus[orderHash].isFilledOrCancelled) revert OrderFilledOrCancelled();\n\n        // Validate nonce\n        if (!isValidNonce(order.maker, order.nonce)) revert InvalidNonce();\n    }\n\n    /// @notice Fills an order against the caller\n    /// @param order        - The order to be filled\n    /// @param fillAmount   - The amount to be filled, always in terms of the maker amount\n    /// @param to           - The address to receive assets from filling the order\n    function _fillOrder(Order memory order, uint256 fillAmount, address to) internal {\n        uint256 making = fillAmount;\n        (uint256 taking, bytes32 orderHash) = _performOrderChecks(order, making);\n\n        uint256 fee = CalculatorHelper.calculateFee(\n            order.feeRateBps, order.side == Side.BUY ? taking : making, order.makerAmount, order.takerAmount, order.side\n        );\n\n        (uint256 makerAssetId, uint256 takerAssetId) = _deriveAssetIds(order);\n\n        // Transfer order proceeds minus fees from msg.sender to order maker\n        _transfer(msg.sender, order.maker, takerAssetId, taking - fee);\n\n        // Transfer makingAmount from order maker to `to`\n        _transfer(order.maker, to, makerAssetId, making);\n\n        // NOTE: Fees are \"collected\" by the Operator implicitly,\n        // since the fee is deducted from the assets paid by the Operator\n\n        emit OrderFilled(orderHash, order.maker, msg.sender, makerAssetId, takerAssetId, making, taking, fee);\n    }\n\n    /// @notice Fills a set of orders against the caller\n    /// @param orders       - The order to be filled\n    /// @param fillAmounts  - The amounts to be filled, always in terms of the maker amount\n    /// @param to           - The address to receive assets from filling the order\n    function _fillOrders(Order[] memory orders, uint256[] memory fillAmounts, address to) internal {\n        uint256 length = orders.length;\n        uint256 i = 0;\n        for (; i < length;) {\n            _fillOrder(orders[i], fillAmounts[i], to);\n            unchecked {\n                ++i;\n            }\n        }\n    }\n\n    /// @notice Matches orders against each other\n    /// Matches a taker order against a list of maker orders\n    /// @param takerOrder       - The active order to be matched\n    /// @param makerOrders      - The array of passive orders to be matched against the active order\n    /// @param takerFillAmount  - The amount to fill on the taker order, in terms of the maker amount\n    /// @param makerFillAmounts - The array of amounts to fill on the maker orders, in terms of the maker amount\n    function _matchOrders(\n        Order memory takerOrder,\n        Order[] memory makerOrders,\n        uint256 takerFillAmount,\n        uint256[] memory makerFillAmounts\n    ) internal {\n        uint256 making = takerFillAmount;\n\n        (uint256 taking, bytes32 orderHash) = _performOrderChecks(takerOrder, making);\n        (uint256 makerAssetId, uint256 takerAssetId) = _deriveAssetIds(takerOrder);\n\n        // Transfer takerOrder making amount from taker order to the Exchange\n        _transfer(takerOrder.maker, address(this), makerAssetId, making);\n\n        // Fill the maker orders\n        _fillMakerOrders(takerOrder, makerOrders, makerFillAmounts);\n\n        taking = _updateTakingWithSurplus(taking, takerAssetId);\n        uint256 fee = CalculatorHelper.calculateFee(\n            takerOrder.feeRateBps, takerOrder.side == Side.BUY ? taking : making, making, taking, takerOrder.side\n        );\n\n        // Execute transfers\n\n        // Transfer order proceeds post fees from the Exchange to the taker order maker\n        _transfer(address(this), takerOrder.maker, takerAssetId, taking - fee);\n\n        // Charge the fee to taker order maker, explicitly transferring the fee from the Exchange to the Operator\n        _chargeFee(address(this), msg.sender, takerAssetId, fee);\n\n        // Refund any leftover tokens pulled from the taker to the taker order\n        uint256 refund = _getBalance(makerAssetId);\n        if (refund > 0) _transfer(address(this), takerOrder.maker, makerAssetId, refund);\n\n        emit OrderFilled(\n            orderHash, takerOrder.maker, address(this), makerAssetId, takerAssetId, making, taking, fee\n        );\n\n        emit OrdersMatched(orderHash, takerOrder.maker, makerAssetId, takerAssetId, making, taking);\n\n        \n    }\n\n    function _fillMakerOrders(Order memory takerOrder, Order[] memory makerOrders, uint256[] memory makerFillAmounts)\n        internal\n    {\n        uint256 length = makerOrders.length;\n        uint256 i = 0;\n        for (; i < length;) {\n            _fillMakerOrder(takerOrder, makerOrders[i], makerFillAmounts[i]);\n            unchecked {\n                ++i;\n            }\n        }\n    }\n\n    /// @notice Fills a Maker order\n    /// @param takerOrder   - The taker order\n    /// @param makerOrder   - The maker order\n    /// @param fillAmount   - The fill amount\n    function _fillMakerOrder(Order memory takerOrder, Order memory makerOrder, uint256 fillAmount) internal {\n        MatchType matchType = _deriveMatchType(takerOrder, makerOrder);\n\n        // Ensure taker order and maker order match\n        _validateTakerAndMaker(takerOrder, makerOrder, matchType);\n\n        uint256 making = fillAmount;\n        (uint256 taking, bytes32 orderHash) = _performOrderChecks(makerOrder, making);\n        uint256 fee = CalculatorHelper.calculateFee(\n            makerOrder.feeRateBps,\n            makerOrder.side == Side.BUY ? taking : making,\n            makerOrder.makerAmount,\n            makerOrder.takerAmount,\n            makerOrder.side\n        );\n        (uint256 makerAssetId, uint256 takerAssetId) = _deriveAssetIds(makerOrder);\n\n        _fillFacingExchange(making, taking, makerOrder.maker, makerAssetId, takerAssetId, matchType, fee);\n\n        emit OrderFilled(\n            orderHash, makerOrder.maker, takerOrder.maker, makerAssetId, takerAssetId, making, taking, fee\n        );\n    }\n\n    /// @notice Performs common order computations and validation\n    /// 1) Validates the order taker\n    /// 2) Computes the order hash\n    /// 3) Validates the order\n    /// 4) Computes taking amount\n    /// 5) Updates the order status in storage\n    /// @param order    - The order being prepared\n    /// @param making   - The amount of the order being filled, in terms of maker amount\n    function _performOrderChecks(Order memory order, uint256 making)\n        internal\n        returns (uint256 takingAmount, bytes32 orderHash)\n    {\n        _validateTaker(order.taker);\n\n        orderHash = hashOrder(order);\n\n        // Validate order\n        _validateOrder(orderHash, order);\n\n        // Calculate taking amount\n        takingAmount = CalculatorHelper.calculateTakingAmount(making, order.makerAmount, order.takerAmount);\n\n        // Update the order status in storage\n        _updateOrderStatus(orderHash, order, making);\n    }\n\n    /// @notice Fills a maker order using the Exchange as the counterparty\n    /// @param makingAmount - Amount to be filled in terms of maker amount\n    /// @param takingAmount - Amount to be filled in terms of taker amount\n    /// @param maker        - The order maker\n    /// @param makerAssetId - The Token Id of the Asset to be sold\n    /// @param takerAssetId - The Token Id of the Asset to be received\n    /// @param matchType    - The match type\n    /// @param fee          - The fee charged to the Order maker\n    function _fillFacingExchange(\n        uint256 makingAmount,\n        uint256 takingAmount,\n        address maker,\n        uint256 makerAssetId,\n        uint256 takerAssetId,\n        MatchType matchType,\n        uint256 fee\n    ) internal {\n        // Transfer makingAmount tokens from order maker to Exchange\n        _transfer(maker, address(this), makerAssetId, makingAmount);\n\n        // Executes a match call based on match type\n        _executeMatchCall(makingAmount, takingAmount, makerAssetId, takerAssetId, matchType);\n\n        // Ensure match action generated enough tokens to fill the order\n        if (_getBalance(takerAssetId) < takingAmount) revert TooLittleTokensReceived();\n\n        // Transfer order proceeds minus fees from the Exchange to the order maker\n        _transfer(address(this), maker, takerAssetId, takingAmount - fee);\n\n        // Transfer fees from Exchange to the Operator\n        _chargeFee(address(this), msg.sender, takerAssetId, fee);\n    }\n\n    function _deriveMatchType(Order memory takerOrder, Order memory makerOrder) internal pure returns (MatchType) {\n        if (takerOrder.side == Side.BUY && makerOrder.side == Side.BUY) return MatchType.MINT;\n        if (takerOrder.side == Side.SELL && makerOrder.side == Side.SELL) return MatchType.MERGE;\n        return MatchType.COMPLEMENTARY;\n    }\n\n    function _deriveAssetIds(Order memory order) internal pure returns (uint256 makerAssetId, uint256 takerAssetId) {\n        if (order.side == Side.BUY) return (0, order.tokenId);\n        return (order.tokenId, 0);\n    }\n\n    /// @notice Executes a CTF call to match orders by minting new Outcome tokens\n    /// or merging Outcome tokens into collateral.\n    /// @param makingAmount - Amount to be filled in terms of maker amount\n    /// @param takingAmount - Amount to be filled in terms of taker amount\n    /// @param makerAssetId - The Token Id of the Asset to be sold\n    /// @param takerAssetId - The Token Id of the Asset to be received\n    /// @param matchType    - The match type\n    function _executeMatchCall(\n        uint256 makingAmount,\n        uint256 takingAmount,\n        uint256 makerAssetId,\n        uint256 takerAssetId,\n        MatchType matchType\n    ) internal {\n        if (matchType == MatchType.COMPLEMENTARY) {\n            // Indicates a buy vs sell order\n            // no match action needed\n            return;\n        }\n        if (matchType == MatchType.MINT) {\n            // Indicates matching 2 buy orders\n            // Mint new Outcome tokens using Exchange collateral balance and fill buys\n            return _mint(getConditionId(takerAssetId), takingAmount);\n        }\n        if (matchType == MatchType.MERGE) {\n            // Indicates matching 2 sell orders\n            // Merge the Exchange Outcome token balance into collateral and fill sells\n            return _merge(getConditionId(makerAssetId), makingAmount);\n        }\n    }\n\n    /// @notice Ensures the taker and maker orders can be matched against each other\n    /// @param takerOrder   - The taker order\n    /// @param makerOrder   - The maker order\n    function _validateTakerAndMaker(Order memory takerOrder, Order memory makerOrder, MatchType matchType)\n        internal\n        view\n    {\n        if (!CalculatorHelper.isCrossing(takerOrder, makerOrder)) revert NotCrossing();\n\n        // Ensure orders match\n        if (matchType == MatchType.COMPLEMENTARY) {\n            if (takerOrder.tokenId != makerOrder.tokenId) revert MismatchedTokenIds();\n        } else {\n            // both bids or both asks\n            validateComplement(takerOrder.tokenId, makerOrder.tokenId);\n        }\n    }\n\n    function _validateTaker(address taker) internal view {\n        if (taker != address(0) && taker != msg.sender) revert NotTaker();\n    }\n\n    function _chargeFee(address payer, address receiver, uint256 tokenId, uint256 fee) internal {\n        // Charge fee to the payer if any\n        if (fee > 0) {\n            _transfer(payer, receiver, tokenId, fee);\n            emit FeeCharged(receiver, tokenId, fee);\n        }\n    }\n\n    function _updateOrderStatus(bytes32 orderHash, Order memory order, uint256 makingAmount)\n        internal\n        returns (uint256 remaining)\n    {\n        OrderStatus storage status = orderStatus[orderHash];\n        // Fetch remaining amount from storage\n        remaining = status.remaining;\n\n        // Update remaining if the order is new/has not been filled\n        remaining = remaining == 0 ? order.makerAmount : remaining;\n\n        // Throw if the makingAmount(amount to be filled) is greater than the amount available\n        if (makingAmount > remaining) revert MakingGtRemaining();\n\n        // Update remaining using the makingAmount\n        remaining = remaining - makingAmount;\n\n        // If order is completely filled, update isFilledOrCancelled in storage\n        if (remaining == 0) status.isFilledOrCancelled = true;\n\n        // Update remaining in storage\n        status.remaining = remaining;\n    }\n\n    function _updateTakingWithSurplus(uint256 minimumAmount, uint256 tokenId) internal returns (uint256) {\n        uint256 actualAmount = _getBalance(tokenId);\n        if (actualAmount < minimumAmount) revert TooLittleTokensReceived();\n        return actualAmount;\n    }\n}\n"
  },
  {
    "path": "src/exchange/scripts/ExchangeDeployment.s.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport { Script } from \"forge-std/Script.sol\";\nimport { CTFExchange } from \"exchange/CTFExchange.sol\";\n\n/// @title ExchangeDeployment\n/// @notice Script to deploy the CTF Exchange\n/// @author Polymarket\ncontract ExchangeDeployment is Script {\n    /// @notice Deploys the Exchange contract\n    /// @param admin        - The admin for the Exchange\n    /// @param collateral   - The collateral token address\n    /// @param ctf          - The CTF address\n    /// @param proxyFactory - The Polymarket proxy factory address\n    /// @param safeFactory  - The Polymarket Gnosis Safe factory address\n    function deployExchange(address admin, address collateral, address ctf, address proxyFactory, address safeFactory)\n        public\n        returns (address exchange)\n    {\n        vm.startBroadcast();\n\n        CTFExchange exch = new CTFExchange(collateral, ctf, proxyFactory, safeFactory);\n\n        // Grant Auth privileges to the Admin address\n        exch.addAdmin(admin);\n        exch.addOperator(admin);\n\n        // Revoke the deployer's authorization\n        exch.renounceAdminRole();\n        exch.renounceOperatorRole();\n\n        exchange = address(exch);\n    }\n}\n"
  },
  {
    "path": "src/exchange/test/BaseExchangeTest.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { TestHelper } from \"dev/TestHelper.sol\";\n\nimport { USDC } from \"dev/mocks/USDC.sol\";\nimport { ERC1271Mock } from \"dev/mocks/ERC1271Mock.sol\";\n\nimport { Deployer } from \"dev/util/Deployer.sol\";\n\nimport { IERC20 } from \"openzeppelin-contracts/token/ERC20/IERC20.sol\";\nimport { IERC1155 } from \"openzeppelin-contracts/token/ERC1155/IERC1155.sol\";\n\nimport { CTFExchange } from \"exchange/CTFExchange.sol\";\nimport { IAuthEE } from \"exchange/interfaces/IAuth.sol\";\nimport { IFeesEE } from \"exchange/interfaces/IFees.sol\";\nimport { ITradingEE } from \"exchange/interfaces/ITrading.sol\";\nimport { IPausableEE } from \"exchange/interfaces/IPausable.sol\";\nimport { IRegistryEE } from \"exchange/interfaces/IRegistry.sol\";\nimport { ISignaturesEE } from \"exchange/interfaces/ISignatures.sol\";\n\nimport { IConditionalTokens } from \"exchange/interfaces/IConditionalTokens.sol\";\n\nimport { CalculatorHelper } from \"exchange/libraries/CalculatorHelper.sol\";\nimport { Order, Side, SignatureType } from \"exchange/libraries/OrderStructs.sol\";\n\ncontract BaseExchangeTest is TestHelper, IAuthEE, IFeesEE, IRegistryEE, IPausableEE, ITradingEE, ISignaturesEE {\n    mapping(address => mapping(address => mapping(uint256 => uint256))) private _checkpoints1155;\n\n    USDC public usdc;\n    IConditionalTokens public ctf;\n    CTFExchange public exchange;\n\n    bytes32 public constant questionID = hex\"1234\";\n    bytes32 public conditionId;\n    uint256 public yes;\n    uint256 public no;\n\n    address public admin = alice;\n    uint256 internal bobPK = 0xB0B;\n    uint256 internal carlaPK = 0xCA414;\n    address public bob;\n    address public carla;\n\n    ERC1271Mock public contractWallet;\n\n    // ERC20 transfer event\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    // ERC1155 transfer event\n    event TransferSingle(\n        address indexed operator, address indexed from, address indexed to, uint256 id, uint256 amount\n    );\n\n    function setUp() public virtual {\n        bob = vm.addr(bobPK);\n        vm.label(bob, \"bob\");\n        carla = vm.addr(carlaPK);\n        vm.label(carla, \"carla\");\n\n        usdc = new USDC();\n        vm.label(address(usdc), \"USDC\");\n        ctf = IConditionalTokens(Deployer.ConditionalTokens());\n        vm.label(address(ctf), \"CTF\");\n\n        conditionId = _prepareCondition(admin, questionID);\n        yes = _getPositionId(2);\n        no = _getPositionId(1);\n\n        // Deploy a 1271 contract and set carla as the signer\n        contractWallet = new ERC1271Mock(carla);\n\n        vm.startPrank(admin);\n        exchange = new CTFExchange(address(usdc), address(ctf), address(0), address(0));\n        exchange.registerToken(yes, no, conditionId);\n        exchange.addOperator(bob);\n        exchange.addOperator(carla);\n        vm.stopPrank();\n    }\n\n    function _prepareCondition(address oracle, bytes32 _questionId) internal returns (bytes32) {\n        ctf.prepareCondition(oracle, _questionId, 2);\n        return ctf.getConditionId(oracle, _questionId, 2);\n    }\n\n    function _getPositionId(uint256 indexSet) internal view returns (uint256) {\n        return ctf.getPositionId(IERC20(address(usdc)), ctf.getCollectionId(bytes32(0), conditionId, indexSet));\n    }\n\n    function _createAndSignOrderWithFee(\n        uint256 pk,\n        uint256 tokenId,\n        uint256 makerAmount,\n        uint256 takerAmount,\n        uint256 feeRateBps,\n        Side side\n    ) internal returns (Order memory) {\n        address maker = vm.addr(pk);\n        Order memory order = _createOrder(maker, tokenId, makerAmount, takerAmount, side);\n        order.feeRateBps = feeRateBps;\n        order.signature = _signMessage(pk, exchange.hashOrder(order));\n        return order;\n    }\n\n    function _createAndSignOrder(uint256 pk, uint256 tokenId, uint256 makerAmount, uint256 takerAmount, Side side)\n        internal\n        returns (Order memory)\n    {\n        address maker = vm.addr(pk);\n        Order memory order = _createOrder(maker, tokenId, makerAmount, takerAmount, side);\n        order.signature = _signMessage(pk, exchange.hashOrder(order));\n        return order;\n    }\n\n    function _createAndSign1271Order(uint256 signerPk, address wallet, uint256 tokenId, uint256 makerAmount, uint256 takerAmount, Side side) \n        internal\n        returns (Order memory)\n    {\n        Order memory order = _createOrder(wallet, tokenId, makerAmount, takerAmount, side);\n        order.signatureType = SignatureType.POLY_1271;\n        order.signature = _signMessage(signerPk, exchange.hashOrder(order));\n        return order;\n    }\n\n    function _createOrder(address maker, uint256 tokenId, uint256 makerAmount, uint256 takerAmount, Side side)\n        internal\n        pure\n        returns (Order memory)\n    {\n        Order memory order = Order({\n            salt: 1,\n            signer: maker,\n            maker: maker,\n            taker: address(0),\n            tokenId: tokenId,\n            makerAmount: makerAmount,\n            takerAmount: takerAmount,\n            expiration: 0,\n            nonce: 0,\n            feeRateBps: 0,\n            signatureType: SignatureType.EOA,\n            side: side,\n            signature: new bytes(0)\n        });\n        return order;\n    }\n\n    function _signMessage(uint256 pk, bytes32 message) internal returns (bytes memory sig) {\n        (uint8 v, bytes32 r, bytes32 s) = vm.sign(pk, message);\n        sig = abi.encodePacked(r, s, v);\n    }\n\n    function _mintTestTokens(address to, address spender, uint256 amount) internal {\n        uint256[] memory partition = new uint256[](2);\n        partition[0] = 1;\n        partition[1] = 2;\n\n        vm.startPrank(to);\n        approve(address(usdc), address(ctf), type(uint256).max);\n\n        dealAndApprove(address(usdc), to, spender, amount);\n        IERC1155(address(ctf)).setApprovalForAll(spender, true);\n\n        uint256 splitAmount = amount / 2;\n        IConditionalTokens(ctf).splitPosition(IERC20(address(usdc)), bytes32(0), conditionId, partition, splitAmount);\n        vm.stopPrank();\n    }\n\n    function assertCollateralBalance(address _who, uint256 _amount) public {\n        assertBalance(address(usdc), _who, _amount);\n    }\n\n    function assertCTFBalance(address _who, uint256 _tokenId, uint256 _amount) public {\n        assertBalance1155(address(ctf), _who, _tokenId, _amount);\n    }\n\n    function checkpointCollateral(address _who) public {\n        checkpointBalance(address(usdc), _who);\n    }\n\n    function checkpointCTF(address _who, uint256 _tokenId) public {\n        checkpointBalance1155(address(ctf), _who, _tokenId);\n    }\n\n    function getCTFBalance(address _who, uint256 _tokenId) public view returns (uint256) {\n        return IERC1155(address(ctf)).balanceOf(_who, _tokenId);\n    }\n\n    function assertBalance1155(address _token, address _who, uint256 _tokenId, uint256 _amount) public {\n        assertEq(getCTFBalance(_who, _tokenId), _checkpoints1155[_token][_who][_tokenId] + _amount);\n    }\n\n    function checkpointBalance1155(address _token, address _who, uint256 _tokenId) public {\n        _checkpoints1155[_token][_who][_tokenId] = getCTFBalance(_who, _tokenId);\n    }\n\n    function calculatePrice(uint256 makerAmount, uint256 takerAmount, Side side) public pure returns (uint256) {\n        return CalculatorHelper._calculatePrice(makerAmount, takerAmount, side);\n    }\n\n    function calculateFee(uint256 _feeRate, uint256 _amount, uint256 makerAmount, uint256 takerAmount, Side side)\n        internal\n        pure\n        returns (uint256)\n    {\n        return CalculatorHelper.calculateFee(_feeRate, _amount, makerAmount, takerAmount, side);\n    }\n\n    function _getTakingAmount(uint256 _making, uint256 _makerAmount, uint256 _takerAmount)\n        internal\n        pure\n        returns (uint256)\n    {\n        return _making * _takerAmount / _makerAmount;\n    }\n}\n"
  },
  {
    "path": "src/exchange/test/CTFExchange.t.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { BaseExchangeTest } from \"exchange/test/BaseExchangeTest.sol\";\nimport { Order, Side, MatchType, OrderStatus, SignatureType } from \"exchange/libraries/OrderStructs.sol\";\n\ncontract CTFExchangeTest is BaseExchangeTest {\n    function testSetup() public {\n        assertTrue(exchange.isAdmin(admin));\n        assertTrue(exchange.isOperator(admin));\n        assertFalse(exchange.isAdmin(brian));\n        assertFalse(exchange.isOperator(brian));\n    }\n\n    function testAuth() public {\n        vm.expectEmit(true, true, true, true);\n        emit NewAdmin(henry, admin);\n        emit NewOperator(henry, admin);\n\n        vm.startPrank(admin);\n        exchange.addAdmin(henry);\n        exchange.addOperator(henry);\n        vm.stopPrank();\n\n        assertTrue(exchange.isOperator(henry));\n        assertTrue(exchange.isAdmin(henry));\n    }\n\n    function testAuthRemoveAdmin() public {\n        vm.expectEmit(true, true, true, true);\n        emit RemovedAdmin(henry, admin);\n        emit RemovedOperator(henry, admin);\n\n        vm.startPrank(admin);\n        exchange.removeAdmin(henry);\n        exchange.removeOperator(henry);\n        vm.stopPrank();\n\n        assertFalse(exchange.isAdmin(henry));\n        assertFalse(exchange.isOperator(henry));\n    }\n\n    function testAuthNotAdmin() public {\n        vm.expectRevert(NotAdmin.selector);\n        exchange.addAdmin(address(1));\n    }\n\n    function testAuthRenounce() public {\n        // Non admin cannot renounce\n        vm.expectRevert(NotAdmin.selector);\n        vm.prank(address(12));\n        exchange.renounceAdminRole();\n\n        assertTrue(exchange.isAdmin(admin));\n        assertTrue(exchange.isOperator(admin));\n\n        // Successfully renounces the admin role\n        vm.prank(admin);\n        exchange.renounceAdminRole();\n        assertFalse(exchange.isAdmin(admin));\n        assertTrue(exchange.isOperator(admin));\n\n        // Successfully renounces the operator role\n        vm.prank(admin);\n        exchange.renounceOperatorRole();\n        assertFalse(exchange.isOperator(admin));\n    }\n\n    function testPause() public {\n        vm.expectEmit(true, true, true, false);\n        emit TradingPaused(admin);\n\n        vm.prank(admin);\n        exchange.pauseTrading();\n\n        _mintTestTokens(bob, address(exchange), 1_000_000_000);\n        _mintTestTokens(carla, address(exchange), 1_000_000_000);\n\n        Order memory order = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n\n        vm.expectRevert(Paused.selector);\n        vm.prank(carla);\n        exchange.fillOrder(order, 50_000_000);\n\n        vm.expectEmit(true, true, true, true);\n        emit TradingUnpaused(admin);\n\n        vm.prank(admin);\n        exchange.unpauseTrading();\n\n        // Order can be filled after unpausing\n        vm.prank(carla);\n        exchange.fillOrder(order, 50_000_000);\n        emit OrderFilled(exchange.hashOrder(order), bob, carla, 0, yes, 50_000_000, 100_000_000, 0);\n    }\n\n    function testRegisterToken(uint256 _token0, uint256 _token1, uint256 _conditionId) public {\n        vm.assume(\n            _token0 != yes && _token0 != no && _token1 != yes && _token1 != no && _token1 != _token0 && _token0 > 0\n                && _token1 > 0\n        );\n        bytes32 tokenConditionId = bytes32(_conditionId);\n\n        vm.expectEmit(true, true, true, false);\n        emit TokenRegistered(_token0, _token1, tokenConditionId);\n        emit TokenRegistered(_token1, _token0, tokenConditionId);\n        vm.prank(admin);\n        exchange.registerToken(_token0, _token1, tokenConditionId);\n\n        assertEq(exchange.getComplement(_token0), _token1);\n        assertEq(exchange.getComplement(_token1), _token0);\n        assertEq(exchange.getConditionId(_token0), tokenConditionId);\n    }\n\n    function testRegisterTokenRevertCases() public {\n        vm.startPrank(admin);\n        vm.expectRevert(InvalidTokenId.selector);\n        exchange.registerToken(0, 0, bytes32(0));\n\n        vm.expectRevert(AlreadyRegistered.selector);\n        exchange.registerToken(no, yes, bytes32(0));\n    }\n\n    function testHashOrder() public {\n        Order memory order = _createOrder(bob, 1, 50_000_000, 100_000_000, Side.BUY);\n\n        bytes32 expectedHash = 0xea9d5909ecf95a08c9906dc3cfafa62ca6b505f5e1c37c33e0d01099c0565c8f;\n\n        assertEq(exchange.hashOrder(order), expectedHash);\n    }\n\n    function testValidate() public {\n        Order memory order = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n        exchange.validateOrder(order);\n    }\n\n    function testValidateInvalidSig() public {\n        Order memory order = _createOrder(bob, yes, 50_000_000, 100_000_000, Side.BUY);\n\n        // Incorrect signature(note: signed by carla)\n        order.signature = _signMessage(carlaPK, exchange.hashOrder(order));\n        vm.expectRevert(InvalidSignature.selector);\n        exchange.validateOrder(order);\n    }\n\n    function testValidateInvalidSigLength() public {\n        Order memory order = _createOrder(bob, yes, 50_000_000, 100_000_000, Side.BUY);\n        order.signature = hex\"\";\n        vm.expectRevert(\"ECDSA: invalid signature length\");\n        exchange.validateOrder(order);\n    }\n\n    function testValidateInvalidNonce() public {\n        Order memory order = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n        vm.prank(bob);\n        exchange.incrementNonce();\n        vm.expectRevert(InvalidNonce.selector);\n        exchange.validateOrder(order);\n\n        order.nonce = 1;\n        order.signature = _signMessage(bobPK, exchange.hashOrder(order));\n        exchange.validateOrder(order);\n    }\n\n    function testValidateInvalidSignerMaker() public {\n        Order memory order = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n        // For EOA signature type, signer and maker MUST be the same\n        order.maker = carla;\n        order.signatureType = SignatureType.EOA;\n        order.signature = _signMessage(bobPK, exchange.hashOrder(order));\n\n        vm.expectRevert(InvalidSignature.selector);\n        exchange.validateOrder(order);\n    }\n\n    function testValidateInvalidExpiration() public {\n        Order memory order = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n        vm.warp(block.timestamp + 1000);\n        order.expiration = 50;\n        vm.expectRevert(OrderExpired.selector);\n        exchange.validateOrder(order);\n    }\n\n    function testValidateDuplicateOrder() public {\n        Order memory order = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n\n        _mintTestTokens(bob, address(exchange), 1_000_000_000);\n        _mintTestTokens(carla, address(exchange), 1_000_000_000);\n        vm.prank(carla);\n        exchange.fillOrder(order, 50_000_000);\n\n        // attempting to fill this order again reverts\n        vm.expectRevert(OrderFilledOrCancelled.selector);\n        vm.prank(carla);\n        exchange.fillOrder(order, 50_000_000);\n    }\n\n    function testValidateFeeTooHigh() public {\n        Order memory order = _createAndSignOrderWithFee(\n            bobPK,\n            yes,\n            50_000_000,\n            100_000_000,\n            10000, // Fee of 100%\n            Side.BUY\n        );\n\n        vm.expectRevert(FeeTooHigh.selector);\n        exchange.validateOrder(order);\n    }\n\n    function testFillOrder() public {\n        _mintTestTokens(bob, address(exchange), 20_000_000_000);\n        _mintTestTokens(carla, address(exchange), 20_000_000_000);\n\n        Order memory order = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n        bytes32 orderHash = exchange.hashOrder(order);\n\n        vm.expectEmit(true, true, true, true);\n        emit OrderFilled(orderHash, bob, carla, 0, yes, 25_000_000, 50_000_000, 0);\n\n        // Checkpoint USDC balance for carla and Outcome token balance for bob\n        checkpointCollateral(carla);\n        checkpointCTF(bob, yes);\n\n        // Partially fill the order with carla\n        vm.prank(carla);\n        exchange.fillOrder(order, 25_000_000);\n\n        // Check balances post fill\n        assertCollateralBalance(carla, 25_000_000);\n        assertCTFBalance(bob, yes, 50_000_000);\n\n        // Ensure the order status is as expected\n        OrderStatus memory status = exchange.getOrderStatus(orderHash);\n        assertEq(status.remaining, 25_000_000);\n        assertFalse(status.isFilledOrCancelled);\n    }\n\n    function testFillOrderPartial() public {\n        _mintTestTokens(bob, address(exchange), 20_000_000_000);\n        _mintTestTokens(carla, address(exchange), 20_000_000_000);\n\n        Order memory order = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n        bytes32 orderHash = exchange.hashOrder(order);\n\n        // Partially fill the order with carla\n        vm.startPrank(carla);\n        exchange.fillOrder(order, 25_000_000);\n\n        // Fill the order again\n        exchange.fillOrder(order, 25_000_000);\n\n        // Ensure the order status is as expected\n        OrderStatus memory status = exchange.getOrderStatus(orderHash);\n        assertEq(status.remaining, 0);\n        assertTrue(status.isFilledOrCancelled);\n    }\n\n    function testFillOrderWithFees() public {\n        _mintTestTokens(bob, address(exchange), 20_000_000_000);\n        _mintTestTokens(carla, address(exchange), 20_000_000_000);\n\n        Order memory order = _createAndSignOrderWithFee(\n            bobPK,\n            yes,\n            50_000_000,\n            100_000_000,\n            100, // 1% or 100 bips\n            Side.BUY\n        );\n        bytes32 orderHash = exchange.hashOrder(order);\n\n        // Fees are charged on order proceeds, in this case Outcome tokens\n        uint256 expectedFee = calculateFee(100, 50_000_000, order.makerAmount, order.takerAmount, order.side);\n\n        vm.expectEmit(true, true, true, true);\n        emit OrderFilled(orderHash, bob, carla, 0, yes, 25_000_000, 50_000_000, expectedFee);\n\n        vm.prank(carla);\n        exchange.fillOrder(order, 25_000_000);\n\n        // Ensure the order status is as expected\n        OrderStatus memory status = exchange.getOrderStatus(orderHash);\n        assertEq(status.remaining, 25_000_000);\n        assertFalse(status.isFilledOrCancelled);\n    }\n\n    function testFuzzFillOrderWithFees(uint128 fillAmount, uint16 feeRateBps) public {\n        uint256 makerAmount = 50_000_000;\n        uint256 takerAmount = 100_000_000;\n\n        vm.assume(fillAmount <= makerAmount && feeRateBps < exchange.getMaxFeeRate());\n\n        _mintTestTokens(bob, address(exchange), 20_000_000_000);\n        _mintTestTokens(carla, address(exchange), 20_000_000_000);\n\n        Order memory order = _createAndSignOrderWithFee(bobPK, yes, makerAmount, takerAmount, feeRateBps, Side.BUY);\n        bytes32 orderHash = exchange.hashOrder(order);\n\n        uint256 remaining = makerAmount - fillAmount;\n        uint256 taking = fillAmount * order.takerAmount / order.makerAmount;\n        uint256 expectedFee = calculateFee(feeRateBps, taking, order.makerAmount, order.takerAmount, order.side);\n\n        vm.expectEmit(true, true, true, true);\n        emit OrderFilled(orderHash, bob, carla, 0, yes, fillAmount, taking, expectedFee);\n\n        checkpointCTF(bob, yes);\n        checkpointCollateral(carla);\n\n        vm.prank(carla);\n        exchange.fillOrder(order, fillAmount);\n\n        // Ensure the order status is as expected\n        OrderStatus memory status = exchange.getOrderStatus(orderHash);\n        assertEq(status.remaining, remaining);\n\n        // Assert the token transfers from the order maker to the filler\n        assertCTFBalance(bob, yes, taking - expectedFee);\n        assertCollateralBalance(carla, fillAmount);\n    }\n\n    function testFillOrderNonTaker() public {\n        _mintTestTokens(bob, address(exchange), 20_000_000_000);\n        _mintTestTokens(carla, address(exchange), 20_000_000_000);\n        _mintTestTokens(admin, address(exchange), 20_000_000_000);\n\n        Order memory order = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n        order.taker = carla;\n        bytes32 orderHash = exchange.hashOrder(order);\n        order.signature = _signMessage(bobPK, orderHash);\n\n        // A non taker operator attempting to fill the order will revert\n        vm.expectRevert(NotTaker.selector);\n        vm.prank(admin);\n        exchange.fillOrder(order, 50_000_000);\n\n        // The taker specified operator will successfully fill the order\n        vm.expectEmit(true, true, true, true);\n        emit OrderFilled(exchange.hashOrder(order), bob, carla, 0, yes, 50_000_000, 100_000_000, 0);\n\n        vm.prank(carla);\n        exchange.fillOrder(order, 50_000_000);\n    }\n\n    function testFillOrders() public {\n        _mintTestTokens(bob, address(exchange), 20_000_000_000);\n        _mintTestTokens(carla, address(exchange), 20_000_000_000);\n\n        Order[] memory orders = new Order[](3);\n        uint256[] memory amounts = new uint256[](3);\n\n        Order memory yesBuy = _createAndSignOrderWithFee(\n            bobPK,\n            yes,\n            50_000_000,\n            100_000_000,\n            100, // 1% or 100 bips\n            Side.BUY\n        );\n\n        Order memory noBuy = _createAndSignOrderWithFee(\n            bobPK,\n            no,\n            50_000_000,\n            100_000_000,\n            100, // 1% or 100 bips\n            Side.BUY\n        );\n\n        Order memory yesSell = _createAndSignOrderWithFee(\n            bobPK,\n            yes,\n            100_000_000,\n            60_000_000,\n            100, // 1% or 100 bips\n            Side.SELL\n        );\n\n        orders[0] = yesBuy;\n        orders[1] = noBuy;\n        orders[2] = yesSell;\n\n        amounts[0] = 50_000_000;\n        amounts[1] = 50_000_000;\n        amounts[2] = 100_000_000;\n\n        uint256 expectedFeeYesBuy = calculateFee(100, 100_000_000, yesBuy.makerAmount, yesBuy.takerAmount, yesBuy.side);\n        uint256 expectedFeeNoBuy = calculateFee(100, 100_000_000, noBuy.makerAmount, noBuy.takerAmount, noBuy.side);\n        uint256 expectedFeeYesSell =\n            calculateFee(100, 100_000_000, yesSell.makerAmount, yesSell.takerAmount, yesSell.side);\n\n        vm.expectEmit(true, true, true, true);\n        emit OrderFilled(exchange.hashOrder(yesBuy), bob, carla, 0, yes, 50_000_000, 100_000_000, expectedFeeYesBuy);\n\n        vm.expectEmit(true, true, true, true);\n        emit OrderFilled(exchange.hashOrder(noBuy), bob, carla, 0, no, 50_000_000, 100_000_000, expectedFeeNoBuy);\n\n        vm.expectEmit(true, true, true, true);\n        emit OrderFilled(exchange.hashOrder(yesSell), bob, carla, yes, 0, 100_000_000, 60_000_000, expectedFeeYesSell);\n\n        vm.prank(carla);\n        exchange.fillOrders(orders, amounts);\n    }\n\n    function testFillOrderZeroMakerAmount() public {\n        _mintTestTokens(bob, address(exchange), 20_000_000_000);\n        _mintTestTokens(carla, address(exchange), 20_000_000_000);\n\n        // Create a non-standard order with 0 maker amount\n        Order memory order = _createAndSignOrder(bobPK, yes, 0, 100_000_000, Side.BUY);\n\n        // Reverts since the order does not allocate any tokens to be sold, i.e zero maker amount\n        vm.expectRevert(MakingGtRemaining.selector);\n        vm.prank(carla);\n        exchange.fillOrder(order, 50_000_000);\n    }\n\n    function testFillOrderZeroTakerAmount() public {\n        _mintTestTokens(bob, address(exchange), 20_000_000_000);\n        _mintTestTokens(carla, address(exchange), 20_000_000_000);\n\n        // Create a non-standard order with 0 taker amount\n        Order memory order = _createAndSignOrder(bobPK, yes, 50_000_000, 0, Side.BUY);\n\n        // As such, the order can be successfully filled with *nothing*.\n        // Note: it is up to the user to provide sensible maker and taker amounts\n        // See the below CTF ERC1155 transfer event:\n        // Transferring 0 YES tokens from carla in return for all of the USDC in the order\n        vm.expectEmit(true, true, true, true);\n        emit TransferSingle(address(exchange), carla, bob, yes, 0);\n\n        vm.expectEmit(true, true, true, true);\n        emit OrderFilled(exchange.hashOrder(order), bob, carla, 0, yes, 50_000_000, 0, 0);\n\n        uint256 fillAmount = 50_000_000;\n        vm.prank(carla);\n        exchange.fillOrder(order, fillAmount);\n    }\n\n    function testFillOrderMaliciousOperator() public {\n        _mintTestTokens(bob, address(exchange), 20_000_000_000);\n        _mintTestTokens(carla, address(exchange), 20_000_000_000);\n\n        Order memory order = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n\n        // A malicious operator could attempt to pull tokens available in the order maker's wallet\n        // Exchange will protect against this and revert\n        uint256 fillAmount = usdc.balanceOf(bob);\n\n        vm.expectRevert(MakingGtRemaining.selector);\n        vm.prank(carla);\n        exchange.fillOrder(order, fillAmount);\n    }\n\n    function testCancelOrder(uint256 makerAmount, uint256 takerAmount, uint256 tokenId) public {\n        vm.assume(tokenId > 0);\n\n        Order memory order = _createAndSignOrder(bobPK, tokenId, makerAmount, takerAmount, Side.BUY);\n        bytes32 orderHash = exchange.hashOrder(order);\n\n        vm.expectEmit(true, true, true, true);\n        emit OrderCancelled(orderHash);\n        vm.prank(bob);\n        exchange.cancelOrder(order);\n    }\n\n    function testCancelOrders(uint256 makerAmount, uint256 takerAmount, uint256 tokenId) public {\n        vm.assume(tokenId > 0);\n\n        Order memory o1 = _createAndSignOrder(bobPK, tokenId, makerAmount, takerAmount, Side.BUY);\n        bytes32 o1Hash = exchange.hashOrder(o1);\n\n        Order memory o2 = _createAndSignOrder(bobPK, tokenId, makerAmount, takerAmount, Side.SELL);\n        bytes32 o2Hash = exchange.hashOrder(o2);\n\n        Order[] memory orders = new Order[](2);\n        orders[0] = o1;\n        orders[1] = o2;\n\n        vm.expectEmit(true, true, true, true);\n        emit OrderCancelled(o1Hash);\n        emit OrderCancelled(o2Hash);\n\n        vm.prank(bob);\n        exchange.cancelOrders(orders);\n    }\n\n    function testCancelOrderNotOwner() public {\n        Order memory order = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n        vm.expectRevert(NotOwner.selector);\n        vm.prank(carla);\n        exchange.cancelOrder(order);\n    }\n\n    function testCancelOrderOrderFilledOrCancelled() public {\n        _mintTestTokens(bob, address(exchange), 1_000_000_000);\n        _mintTestTokens(carla, address(exchange), 1_000_000_000);\n\n        Order memory order = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n\n        vm.prank(carla);\n        exchange.fillOrder(order, 50_000_000);\n\n        vm.expectRevert(OrderFilledOrCancelled.selector);\n        vm.prank(bob);\n        exchange.cancelOrder(order);\n    }\n\n    function testCancelOrderNonExistent() public {\n        Order memory order = _createAndSignOrder(bobPK, 1, 50_000_000, 100_000_000, Side.BUY);\n\n        // Cancelling a new order is valid, the order will now be unfillable\n        vm.prank(bob);\n        exchange.cancelOrder(order);\n\n        OrderStatus memory status = exchange.getOrderStatus(exchange.hashOrder(order));\n        assertTrue(status.isFilledOrCancelled);\n        assertEq(status.remaining, 0);\n\n        vm.expectRevert(OrderFilledOrCancelled.selector);\n        vm.prank(bob);\n        exchange.cancelOrder(order);\n    }\n\n    function testCalculateFeeBuy() public {\n        uint256 feeRateBps = 100; // 1%\n        uint256 proceeds;\n        uint256 expectedFee;\n        uint256 actualFee;\n        Order memory order;\n\n        order = _createOrder(bob, yes, 40_000_000, 100_000_000, Side.BUY);\n        proceeds = 100_000_000;\n        expectedFee = 1000000;\n        actualFee = calculateFee(feeRateBps, proceeds, order.makerAmount, order.takerAmount, order.side);\n        assertEq(actualFee, expectedFee);\n\n        order = _createOrder(bob, yes, 20_000_000, 100_000_000, Side.BUY);\n        proceeds = 100_000_000;\n        expectedFee = 1000000;\n        actualFee = calculateFee(feeRateBps, proceeds, order.makerAmount, order.takerAmount, order.side);\n        assertEq(actualFee, expectedFee);\n\n        order = _createOrder(bob, yes, 60_000_000, 100_000_000, Side.BUY);\n        proceeds = 100_000_000;\n        expectedFee = 666666;\n        actualFee = calculateFee(feeRateBps, proceeds, order.makerAmount, order.takerAmount, order.side);\n        assertEq(actualFee, expectedFee);\n\n        order = _createOrder(bob, yes, 80_000_000, 100_000_000, Side.BUY);\n        proceeds = 100_000_000;\n        expectedFee = 250000;\n        actualFee = calculateFee(feeRateBps, proceeds, order.makerAmount, order.takerAmount, order.side);\n        assertEq(actualFee, expectedFee);\n\n        order = _createOrder(bob, yes, 99_000_000, 100_000_000, Side.BUY);\n        proceeds = 100_000_000;\n        expectedFee = 10101;\n        actualFee = calculateFee(feeRateBps, proceeds, order.makerAmount, order.takerAmount, order.side);\n        assertEq(actualFee, expectedFee);\n\n        order = _createOrder(bob, yes, 1_000_000, 100_000_000, Side.BUY);\n        proceeds = 100_000_000;\n        expectedFee = 1_000_000;\n        actualFee = calculateFee(feeRateBps, proceeds, order.makerAmount, order.takerAmount, order.side);\n        assertEq(actualFee, expectedFee);\n\n        order = _createOrder(bob, yes, 100_000_000, 500_000_000, Side.BUY);\n        proceeds = 500_000_000;\n        expectedFee = 5_000_000;\n        actualFee = calculateFee(feeRateBps, proceeds, order.makerAmount, order.takerAmount, order.side);\n        assertEq(actualFee, expectedFee);\n\n        order = _createOrder(bob, yes, 1_000, 2_000, Side.BUY);\n        proceeds = 2_000;\n        expectedFee = 20;\n        actualFee = calculateFee(feeRateBps, proceeds, order.makerAmount, order.takerAmount, order.side);\n        assertEq(actualFee, expectedFee);\n    }\n\n    function testCalculateFeeSell() public {\n        uint256 feeRateBps = 100; // 1%\n        uint256 proceeds = 100_000_000;\n        uint256 expectedFee;\n        uint256 actualFee;\n        Order memory order;\n\n        order = _createOrder(bob, yes, 100_000_000, 40_000_000, Side.SELL);\n        proceeds = 100_000_000;\n        expectedFee = 400000;\n        actualFee = calculateFee(feeRateBps, proceeds, order.makerAmount, order.takerAmount, order.side);\n        assertEq(actualFee, expectedFee);\n\n        order = _createOrder(bob, yes, 100_000_000, 20_000_000, Side.SELL);\n        expectedFee = 200000;\n        actualFee = calculateFee(feeRateBps, proceeds, order.makerAmount, order.takerAmount, order.side);\n        assertEq(actualFee, expectedFee);\n\n        order = _createOrder(bob, yes, 100_000_000, 60_000_000, Side.SELL);\n        expectedFee = 400000;\n        actualFee = calculateFee(feeRateBps, proceeds, order.makerAmount, order.takerAmount, order.side);\n        assertEq(actualFee, expectedFee);\n\n        order = _createOrder(bob, yes, 100_000_000, 80_000_000, Side.SELL);\n        expectedFee = 200000;\n        actualFee = calculateFee(feeRateBps, proceeds, order.makerAmount, order.takerAmount, order.side);\n        assertEq(actualFee, expectedFee);\n\n        order = _createOrder(bob, yes, 100_000_000, 99_000_000, Side.SELL);\n        expectedFee = 10000;\n        actualFee = calculateFee(feeRateBps, proceeds, order.makerAmount, order.takerAmount, order.side);\n        assertEq(actualFee, expectedFee);\n\n        order = _createOrder(bob, yes, 100_000_000, 1_000_000, Side.SELL);\n        expectedFee = 10000;\n        actualFee = calculateFee(feeRateBps, proceeds, order.makerAmount, order.takerAmount, order.side);\n        assertEq(actualFee, expectedFee);\n\n        order = _createOrder(bob, yes, 500_000_000, 100_000_000, Side.SELL);\n        proceeds = 500_000_000;\n        expectedFee = 1_000_000;\n        actualFee = calculateFee(feeRateBps, proceeds, order.makerAmount, order.takerAmount, order.side);\n        assertEq(actualFee, expectedFee);\n\n        order = _createOrder(bob, yes, 2_000, 1_000, Side.SELL);\n        proceeds = 2_000;\n        expectedFee = 10;\n        actualFee = calculateFee(feeRateBps, proceeds, order.makerAmount, order.takerAmount, order.side);\n        assertEq(actualFee, expectedFee);\n    }\n\n    function testFuzzCalculateFee(uint128 fillAmount, uint16 feeRateBps, uint128 makerAmount, uint128 takerAmount)\n        public\n    {\n        vm.assume(\n            makerAmount > 0 && takerAmount > makerAmount && fillAmount <= makerAmount\n                && feeRateBps < exchange.getMaxFeeRate()\n        );\n\n        uint256 expectedProceeds = _getTakingAmount(fillAmount, makerAmount, takerAmount);\n        calculateFee(feeRateBps, expectedProceeds, makerAmount, takerAmount, Side.BUY);\n        calculateFee(feeRateBps, expectedProceeds, takerAmount, makerAmount, Side.SELL);\n    }\n\n    function testCalculateFeeLargePrice() public {\n        // Possible for an order to have a price that breaks fee calculation:\n        // Implies a price of 100 USD per YES token\n        uint256 makerAmount = 1_000_000; // yes tokens\n        uint256 takerAmount = 100_000_000; // cash\n\n        Side side = Side.SELL;\n        uint256 feeRateBps = 100;\n        uint256 outcomeTokens = takerAmount;\n\n        // ignore these orders in fee calculation\n        uint256 fee = calculateFee(feeRateBps, outcomeTokens, makerAmount, takerAmount, side);\n        assertEq(fee, 0);\n    }\n}\n"
  },
  {
    "path": "src/exchange/test/ERC1271Signature.t.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { BaseExchangeTest } from \"exchange/test/BaseExchangeTest.sol\";\nimport { Order, Side, SignatureType } from \"exchange/libraries/OrderStructs.sol\";\n\ncontract ERC1271SignatureTest is BaseExchangeTest {\n    function test_validate1271Signature() public {\n        Order memory order =\n            _createAndSign1271Order(carlaPK, address(contractWallet), yes, 50_000_000, 100_000_000, Side.BUY);\n        exchange.validateOrderSignature(exchange.hashOrder(order), order);\n    }\n\n    function test_validate1271Signature_revert_incorrectSigner() public {\n        Order memory order = _createOrder(address(contractWallet), yes, 50_000_000, 100_000_000, Side.BUY);\n        order.signatureType = SignatureType.POLY_1271;\n        bytes32 orderHash = exchange.hashOrder(order);\n        order.signature = _signMessage(bobPK, orderHash);\n        vm.expectRevert(InvalidSignature.selector);\n        exchange.validateOrderSignature(orderHash, order);\n    }\n\n    function test_validate1271Signature_revert_sigType() public {\n        Order memory order = _createOrder(address(contractWallet), yes, 50_000_000, 100_000_000, Side.BUY);\n        order.signatureType = SignatureType.EOA;\n        bytes32 orderHash = exchange.hashOrder(order);\n        order.signature = _signMessage(carlaPK, orderHash);\n        vm.expectRevert(InvalidSignature.selector);\n        exchange.validateOrderSignature(orderHash, order);\n    }\n\n    function test_validate1271Signature_revert_nonContract() public {\n        Order memory order = _createOrder(carla, yes, 50_000_000, 100_000_000, Side.BUY);\n        order.signatureType = SignatureType.POLY_1271;\n        bytes32 orderHash = exchange.hashOrder(order);\n        order.signature = _signMessage(carlaPK, orderHash);\n        vm.expectRevert(InvalidSignature.selector);\n        exchange.validateOrderSignature(orderHash, order);\n    }\n\n    function test_validate1271Signature_revert_invalidContract() public {\n        // revert when using a non 1271 contract\n        Order memory order = _createOrder(address(usdc), yes, 50_000_000, 100_000_000, Side.BUY);\n        order.signatureType = SignatureType.POLY_1271;\n        bytes32 orderHash = exchange.hashOrder(order);\n        order.signature = _signMessage(carlaPK, orderHash);\n        vm.expectRevert(InvalidSignature.selector);\n        exchange.validateOrderSignature(orderHash, order);\n    }\n\n    function test_validate1271Signature_revert_invalidSignerMaker() public {\n        Order memory order = _createOrder(address(contractWallet), yes, 50_000_000, 100_000_000, Side.BUY);\n        order.signatureType = SignatureType.POLY_1271;\n        // signer == carla, maker == contractWallet\n        order.signer = carla;\n        bytes32 orderHash = exchange.hashOrder(order);\n        order.signature = _signMessage(carlaPK, orderHash);\n        vm.expectRevert(InvalidSignature.selector);\n        exchange.validateOrderSignature(orderHash, order);\n    }\n}\n"
  },
  {
    "path": "src/exchange/test/GasSnapshots.t.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.15;\n\nimport { BaseExchangeTest } from \"./BaseExchangeTest.sol\";\nimport { Order, Side, SignatureType } from \"exchange/libraries/OrderStructs.sol\";\nimport { IERC20 } from \"openzeppelin-contracts/token/ERC20/IERC20.sol\";\nimport { IERC1155 } from \"openzeppelin-contracts/token/ERC1155/IERC1155.sol\";\n\n/// @notice Gas snapshot tests for matchOrders\n/// @dev Run with: forge test --match-contract GasSnapshots_Test --gas-report\n/// @dev Snapshots are written to snapshots/GasSnapshots_Test.json\ncontract GasSnapshots_Test is BaseExchangeTest {\n\n    /*//////////////////////////////////////////////////////////////\n                        COMPLEMENTARY (BUY vs SELL)\n    //////////////////////////////////////////////////////////////*/\n\n    function test_complementary_1maker() public {\n        (Order memory takerOrder, Order[] memory makerOrders, uint256 takerFillAmount, uint256[] memory fillAmounts) = _prepareComplementary(1);\n\n        vm.prank(bob);\n        vm.startSnapshotGas(\"complementary_1maker\");\n        exchange.matchOrders(takerOrder, makerOrders, takerFillAmount, fillAmounts);\n        vm.stopSnapshotGas();\n    }\n\n    function test_complementary_5makers() public {\n        (Order memory takerOrder, Order[] memory makerOrders, uint256 takerFillAmount, uint256[] memory fillAmounts) = _prepareComplementary(5);\n\n        vm.prank(bob);\n        vm.startSnapshotGas(\"complementary_5makers\");\n        exchange.matchOrders(takerOrder, makerOrders, takerFillAmount, fillAmounts);\n        vm.stopSnapshotGas();\n    }\n\n    function test_complementary_10makers() public {\n        (Order memory takerOrder, Order[] memory makerOrders, uint256 takerFillAmount, uint256[] memory fillAmounts) = _prepareComplementary(10);\n\n        vm.prank(bob);\n        vm.startSnapshotGas(\"complementary_10makers\");\n        exchange.matchOrders(takerOrder, makerOrders, takerFillAmount, fillAmounts);\n        vm.stopSnapshotGas();\n    }\n\n    function test_complementary_20makers() public {\n        (Order memory takerOrder, Order[] memory makerOrders, uint256 takerFillAmount, uint256[] memory fillAmounts) = _prepareComplementary(20);\n\n        vm.prank(bob);\n        vm.startSnapshotGas(\"complementary_20makers\");\n        exchange.matchOrders(takerOrder, makerOrders, takerFillAmount, fillAmounts);\n        vm.stopSnapshotGas();\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                            MINT (BUY vs BUY)\n    //////////////////////////////////////////////////////////////*/\n\n    function test_mint_1maker() public {\n        (Order memory takerOrder, Order[] memory makerOrders, uint256 takerFillAmount, uint256[] memory fillAmounts) = _prepareMint(1);\n\n        vm.prank(bob);\n        vm.startSnapshotGas(\"mint_1maker\");\n        exchange.matchOrders(takerOrder, makerOrders, takerFillAmount, fillAmounts);\n        vm.stopSnapshotGas();\n    }\n\n    function test_mint_5makers() public {\n        (Order memory takerOrder, Order[] memory makerOrders, uint256 takerFillAmount, uint256[] memory fillAmounts) = _prepareMint(5);\n\n        vm.prank(bob);\n        vm.startSnapshotGas(\"mint_5makers\");\n        exchange.matchOrders(takerOrder, makerOrders, takerFillAmount, fillAmounts);\n        vm.stopSnapshotGas();\n    }\n\n    function test_mint_10makers() public {\n        (Order memory takerOrder, Order[] memory makerOrders, uint256 takerFillAmount, uint256[] memory fillAmounts) = _prepareMint(10);\n\n        vm.prank(bob);\n        vm.startSnapshotGas(\"mint_10makers\");\n        exchange.matchOrders(takerOrder, makerOrders, takerFillAmount, fillAmounts);\n        vm.stopSnapshotGas();\n    }\n\n    function test_mint_20makers() public {\n        (Order memory takerOrder, Order[] memory makerOrders, uint256 takerFillAmount, uint256[] memory fillAmounts) = _prepareMint(20);\n\n        vm.prank(bob);\n        vm.startSnapshotGas(\"mint_20makers\");\n        exchange.matchOrders(takerOrder, makerOrders, takerFillAmount, fillAmounts);\n        vm.stopSnapshotGas();\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                          MERGE (SELL vs SELL)\n    //////////////////////////////////////////////////////////////*/\n\n    function test_merge_1maker() public {\n        (Order memory takerOrder, Order[] memory makerOrders, uint256 takerFillAmount, uint256[] memory fillAmounts) = _prepareMerge(1);\n\n        vm.prank(bob);\n        vm.startSnapshotGas(\"merge_1maker\");\n        exchange.matchOrders(takerOrder, makerOrders, takerFillAmount, fillAmounts);\n        vm.stopSnapshotGas();\n    }\n\n    function test_merge_5makers() public {\n        (Order memory takerOrder, Order[] memory makerOrders, uint256 takerFillAmount, uint256[] memory fillAmounts) = _prepareMerge(5);\n\n        vm.prank(bob);\n        vm.startSnapshotGas(\"merge_5makers\");\n        exchange.matchOrders(takerOrder, makerOrders, takerFillAmount, fillAmounts);\n        vm.stopSnapshotGas();\n    }\n\n    function test_merge_10makers() public {\n        (Order memory takerOrder, Order[] memory makerOrders, uint256 takerFillAmount, uint256[] memory fillAmounts) = _prepareMerge(10);\n\n        vm.prank(bob);\n        vm.startSnapshotGas(\"merge_10makers\");\n        exchange.matchOrders(takerOrder, makerOrders, takerFillAmount, fillAmounts);\n        vm.stopSnapshotGas();\n    }\n\n    function test_merge_20makers() public {\n        (Order memory takerOrder, Order[] memory makerOrders, uint256 takerFillAmount, uint256[] memory fillAmounts) = _prepareMerge(20);\n\n        vm.prank(bob);\n        vm.startSnapshotGas(\"merge_20makers\");\n        exchange.matchOrders(takerOrder, makerOrders, takerFillAmount, fillAmounts);\n        vm.stopSnapshotGas();\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                    COMBO: COMPLEMENTARY + MINT\n                (Taker BUY YES, half SELL YES + half BUY NO)\n    //////////////////////////////////////////////////////////////*/\n\n    function test_combo_complementary_mint_10makers() public {\n        (Order memory takerOrder, Order[] memory makerOrders, uint256 takerFillAmount, uint256[] memory fillAmounts) = _prepareComboComplementaryMint(10);\n\n        vm.prank(bob);\n        vm.startSnapshotGas(\"combo_complementary_mint_10makers\");\n        exchange.matchOrders(takerOrder, makerOrders, takerFillAmount, fillAmounts);\n        vm.stopSnapshotGas();\n    }\n\n    function test_combo_complementary_mint_20makers() public {\n        (Order memory takerOrder, Order[] memory makerOrders, uint256 takerFillAmount, uint256[] memory fillAmounts) = _prepareComboComplementaryMint(20);\n\n        vm.prank(bob);\n        vm.startSnapshotGas(\"combo_complementary_mint_20makers\");\n        exchange.matchOrders(takerOrder, makerOrders, takerFillAmount, fillAmounts);\n        vm.stopSnapshotGas();\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                    COMBO: COMPLEMENTARY + MERGE\n                (Taker SELL YES, half BUY YES + half SELL NO)\n    //////////////////////////////////////////////////////////////*/\n\n    function test_combo_complementary_merge_10makers() public {\n        (Order memory takerOrder, Order[] memory makerOrders, uint256 takerFillAmount, uint256[] memory fillAmounts) = _prepareComboComplementaryMerge(10);\n\n        vm.prank(bob);\n        vm.startSnapshotGas(\"combo_complementary_merge_10makers\");\n        exchange.matchOrders(takerOrder, makerOrders, takerFillAmount, fillAmounts);\n        vm.stopSnapshotGas();\n    }\n\n    function test_combo_complementary_merge_20makers() public {\n        (Order memory takerOrder, Order[] memory makerOrders, uint256 takerFillAmount, uint256[] memory fillAmounts) = _prepareComboComplementaryMerge(20);\n\n        vm.prank(bob);\n        vm.startSnapshotGas(\"combo_complementary_merge_20makers\");\n        exchange.matchOrders(takerOrder, makerOrders, takerFillAmount, fillAmounts);\n        vm.stopSnapshotGas();\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                              SETUP HELPERS\n    //////////////////////////////////////////////////////////////*/\n\n    function _prepareComplementary(uint256 numMakers) internal returns (\n        Order memory takerOrder,\n        Order[] memory makerOrders,\n        uint256 takerFillAmount,\n        uint256[] memory fillAmounts\n    ) {\n        uint256 usdcPerMaker = 10_000_000;\n        uint256 tokensPerMaker = 20_000_000;\n        uint256 totalUsdc = usdcPerMaker * numMakers;\n        uint256 totalTokens = tokensPerMaker * numMakers;\n\n        _dealUsdcAndApprove(bob, address(exchange), totalUsdc);\n        _dealOutcomeTokensAndApprove(carla, address(exchange), yes, totalTokens);\n\n        takerOrder = _createAndSignOrderWithSalt(bobPK, yes, totalUsdc, totalTokens, Side.BUY, 1);\n        makerOrders = new Order[](numMakers);\n        fillAmounts = new uint256[](numMakers);\n\n        for (uint256 i = 0; i < numMakers; i++) {\n            makerOrders[i] = _createAndSignOrderWithSalt(carlaPK, yes, tokensPerMaker, usdcPerMaker, Side.SELL, i + 100);\n            fillAmounts[i] = tokensPerMaker;\n        }\n\n        takerFillAmount = totalUsdc;\n    }\n\n    function _prepareMint(uint256 numMakers) internal returns (\n        Order memory takerOrder,\n        Order[] memory makerOrders,\n        uint256 takerFillAmount,\n        uint256[] memory fillAmounts\n    ) {\n        uint256 usdcPerMaker = 10_000_000;\n        uint256 tokensPerMaker = 20_000_000;\n        uint256 totalUsdc = usdcPerMaker * numMakers;\n        uint256 totalTokens = tokensPerMaker * numMakers;\n        uint256 takerUsdc = totalTokens / 2;\n\n        _dealUsdcAndApprove(bob, address(exchange), takerUsdc);\n        _dealUsdcAndApprove(carla, address(exchange), totalUsdc);\n\n        takerOrder = _createAndSignOrderWithSalt(bobPK, yes, takerUsdc, totalTokens, Side.BUY, 1);\n        makerOrders = new Order[](numMakers);\n        fillAmounts = new uint256[](numMakers);\n\n        for (uint256 i = 0; i < numMakers; i++) {\n            makerOrders[i] = _createAndSignOrderWithSalt(carlaPK, no, usdcPerMaker, tokensPerMaker, Side.BUY, i + 100);\n            fillAmounts[i] = usdcPerMaker;\n        }\n\n        takerFillAmount = takerUsdc;\n    }\n\n    function _prepareMerge(uint256 numMakers) internal returns (\n        Order memory takerOrder,\n        Order[] memory makerOrders,\n        uint256 takerFillAmount,\n        uint256[] memory fillAmounts\n    ) {\n        uint256 tokensPerMaker = 20_000_000;\n        uint256 usdcPerMaker = 10_000_000;\n        uint256 totalTokens = tokensPerMaker * numMakers;\n        uint256 totalUsdc = usdcPerMaker * numMakers;\n\n        _dealOutcomeTokensAndApprove(bob, address(exchange), yes, totalTokens);\n        _dealOutcomeTokensAndApprove(carla, address(exchange), no, totalTokens);\n\n        takerOrder = _createAndSignOrderWithSalt(bobPK, yes, totalTokens, totalUsdc, Side.SELL, 1);\n        makerOrders = new Order[](numMakers);\n        fillAmounts = new uint256[](numMakers);\n\n        for (uint256 i = 0; i < numMakers; i++) {\n            makerOrders[i] = _createAndSignOrderWithSalt(carlaPK, no, tokensPerMaker, usdcPerMaker, Side.SELL, i + 100);\n            fillAmounts[i] = tokensPerMaker;\n        }\n\n        takerFillAmount = totalTokens;\n    }\n\n    /// @notice Combo: Taker BUY YES, half makers SELL YES (complementary), half makers BUY NO (mint)\n    function _prepareComboComplementaryMint(uint256 numMakers) internal returns (\n        Order memory takerOrder,\n        Order[] memory makerOrders,\n        uint256 takerFillAmount,\n        uint256[] memory fillAmounts\n    ) {\n        uint256 half = numMakers / 2;\n        uint256 usdcPerMaker = 10_000_000;\n        uint256 tokensPerMaker = 20_000_000;\n\n        // Taker needs USDC for both complementary and mint portions\n        uint256 totalTakerUsdc = usdcPerMaker * half + (tokensPerMaker * half / 2);\n        uint256 totalTakerTokens = tokensPerMaker * numMakers;\n\n        _dealUsdcAndApprove(bob, address(exchange), totalTakerUsdc);\n        // Carla needs YES tokens for complementary (SELL) and USDC for mint (BUY)\n        _dealOutcomeTokensAndApprove(carla, address(exchange), yes, tokensPerMaker * half);\n        _dealUsdcAndApprove(carla, address(exchange), usdcPerMaker * half);\n\n        takerOrder = _createAndSignOrderWithSalt(bobPK, yes, totalTakerUsdc, totalTakerTokens, Side.BUY, 1);\n        makerOrders = new Order[](numMakers);\n        fillAmounts = new uint256[](numMakers);\n\n        // First half: complementary (SELL YES)\n        for (uint256 i = 0; i < half; i++) {\n            makerOrders[i] = _createAndSignOrderWithSalt(carlaPK, yes, tokensPerMaker, usdcPerMaker, Side.SELL, i + 100);\n            fillAmounts[i] = tokensPerMaker;\n        }\n\n        // Second half: mint (BUY NO)\n        for (uint256 i = half; i < numMakers; i++) {\n            makerOrders[i] = _createAndSignOrderWithSalt(carlaPK, no, usdcPerMaker, tokensPerMaker, Side.BUY, i + 100);\n            fillAmounts[i] = usdcPerMaker;\n        }\n\n        takerFillAmount = totalTakerUsdc;\n    }\n\n    /// @notice Combo: Taker SELL YES, half makers BUY YES (complementary), half makers SELL NO (merge)\n    function _prepareComboComplementaryMerge(uint256 numMakers) internal returns (\n        Order memory takerOrder,\n        Order[] memory makerOrders,\n        uint256 takerFillAmount,\n        uint256[] memory fillAmounts\n    ) {\n        uint256 half = numMakers / 2;\n        uint256 tokensPerMaker = 20_000_000;\n        uint256 usdcPerMaker = 10_000_000;\n\n        uint256 totalTakerTokens = tokensPerMaker * numMakers;\n        // Taker receives USDC from complementary and merge\n        uint256 totalTakerUsdc = usdcPerMaker * half + usdcPerMaker * half;\n\n        _dealOutcomeTokensAndApprove(bob, address(exchange), yes, totalTakerTokens);\n        // Carla needs USDC for complementary (BUY) and NO tokens for merge (SELL)\n        _dealUsdcAndApprove(carla, address(exchange), usdcPerMaker * half);\n        _dealOutcomeTokensAndApprove(carla, address(exchange), no, tokensPerMaker * half);\n\n        takerOrder = _createAndSignOrderWithSalt(bobPK, yes, totalTakerTokens, totalTakerUsdc, Side.SELL, 1);\n        makerOrders = new Order[](numMakers);\n        fillAmounts = new uint256[](numMakers);\n\n        // First half: complementary (BUY YES)\n        for (uint256 i = 0; i < half; i++) {\n            makerOrders[i] = _createAndSignOrderWithSalt(carlaPK, yes, usdcPerMaker, tokensPerMaker, Side.BUY, i + 100);\n            fillAmounts[i] = usdcPerMaker;\n        }\n\n        // Second half: merge (SELL NO)\n        for (uint256 i = half; i < numMakers; i++) {\n            makerOrders[i] = _createAndSignOrderWithSalt(carlaPK, no, tokensPerMaker, usdcPerMaker, Side.SELL, i + 100);\n            fillAmounts[i] = tokensPerMaker;\n        }\n\n        takerFillAmount = totalTakerTokens;\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                              HELPERS\n    //////////////////////////////////////////////////////////////*/\n\n    function _dealUsdcAndApprove(address to, address spender, uint256 amount) internal {\n        vm.startPrank(to);\n        dealAndApprove(address(usdc), to, spender, amount);\n        vm.stopPrank();\n    }\n\n    function _dealOutcomeTokensAndApprove(address to, address spender, uint256 tokenId, uint256 amount) internal {\n        vm.startPrank(admin);\n        approve(address(usdc), address(ctf), type(uint256).max);\n        deal(address(usdc), admin, amount);\n\n        uint256[] memory partition = new uint256[](2);\n        partition[0] = 1;\n        partition[1] = 2;\n\n        ctf.splitPosition(IERC20(address(usdc)), bytes32(0), conditionId, partition, amount);\n        IERC1155(address(ctf)).safeTransferFrom(admin, to, tokenId, amount, \"\");\n        vm.stopPrank();\n\n        vm.prank(to);\n        IERC1155(address(ctf)).setApprovalForAll(spender, true);\n    }\n\n    function _createAndSignOrderWithSalt(\n        uint256 pk,\n        uint256 tokenId,\n        uint256 makerAmount,\n        uint256 takerAmount,\n        Side side,\n        uint256 salt\n    ) internal returns (Order memory) {\n        address maker = vm.addr(pk);\n        Order memory order = _createOrderWithSalt(maker, tokenId, makerAmount, takerAmount, side, salt);\n        order.signature = _signMessage(pk, exchange.hashOrder(order));\n        return order;\n    }\n\n    function _createOrderWithSalt(\n        address maker,\n        uint256 tokenId,\n        uint256 makerAmount,\n        uint256 takerAmount,\n        Side side,\n        uint256 salt\n    ) internal pure returns (Order memory) {\n        Order memory order = Order({\n            salt: salt,\n            signer: maker,\n            maker: maker,\n            taker: address(0),\n            tokenId: tokenId,\n            makerAmount: makerAmount,\n            takerAmount: takerAmount,\n            expiration: 0,\n            nonce: 0,\n            feeRateBps: 0,\n            signatureType: SignatureType.EOA,\n            side: side,\n            signature: new bytes(0)\n        });\n        return order;\n    }\n}\n"
  },
  {
    "path": "src/exchange/test/MatchOrders.t.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { BaseExchangeTest } from \"exchange/test/BaseExchangeTest.sol\";\n\nimport { Order, Side } from \"exchange/libraries/OrderStructs.sol\";\n\ncontract MatchOrdersTest is BaseExchangeTest {\n    function setUp() public override {\n        super.setUp();\n        _mintTestTokens(bob, address(exchange), 20_000_000_000);\n        _mintTestTokens(carla, address(exchange), 20_000_000_000);\n    }\n\n    function testMatchTypeComplementary() public {\n        // Init a match with a yes buy against a list of yes sells\n        Order memory buy = _createAndSignOrder(bobPK, yes, 60_000_000, 100_000_000, Side.BUY);\n        Order memory sellA = _createAndSignOrder(carlaPK, yes, 50_000_000, 25_000_000, Side.SELL);\n        Order memory sellB = _createAndSignOrder(carlaPK, yes, 100_000_000, 50_000_000, Side.SELL);\n        Order[] memory makerOrders = new Order[](2);\n        makerOrders[ 0] = sellA;\n        makerOrders[ 1] = sellB;\n\n        uint256[] memory fillAmounts = new uint256[](2);\n        fillAmounts[ 0] = 50_000_000;\n        fillAmounts[ 1] = 70_000_000;\n\n        checkpointCollateral(carla);\n        checkpointCTF(bob, yes);\n\n        // Check fill events\n        // First maker order is filled completely\n        vm.expectEmit(true, true, true, false);\n        emit OrderFilled(exchange.hashOrder(sellA), carla, bob, yes, 0, 50_000_000, 25_000_000, 0);\n\n        // Second maker order is partially filled\n        vm.expectEmit(true, true, true, false);\n        emit OrderFilled(exchange.hashOrder(sellB), carla, bob, yes, 0, 70_000_000, 35_000_000, 0);\n\n        // The taker order is filled completely\n        vm.expectEmit(true, true, true, false);\n        emit OrderFilled(exchange.hashOrder(buy), bob, address(exchange), 0, yes, 60_000_000, 120_000_000, 0);\n\n        vm.expectEmit(true, true, true, false);\n        emit OrdersMatched(exchange.hashOrder(buy), bob, 0, yes, 60_000_000, 120_000_000);\n\n        vm.prank(admin);\n        exchange.matchOrders(buy, makerOrders, 60_000_000, fillAmounts);\n\n        // Ensure balances have been updated post match\n        assertCollateralBalance(carla, 60_000_000);\n        assertCTFBalance(bob, yes, 120_000_000);\n\n        // Ensure onchain state for orders is as expected\n        bytes32 buyHash = exchange.hashOrder(buy);\n        assertEq(exchange.getOrderStatus(buyHash).remaining, 0);\n        assertTrue(exchange.getOrderStatus(buyHash).isFilledOrCancelled);\n    }\n\n    function testMatchTypeMint() public {\n        // Init Match with YES buy against a YES sell and a NO buy\n        // To match the YES buy with the NO buy, CTF Exchange will MINT new Outcome tokens using it's collateral\n        // balance. Then will fill the YES buy and NO buy with the resulting Outcome tokens\n        Order memory buy = _createAndSignOrder(bobPK, yes, 60_000_000, 100_000_000, Side.BUY);\n        Order memory yesSell = _createAndSignOrder(carlaPK, yes, 50_000_000, 25_000_000, Side.SELL);\n        Order memory noBuy = _createAndSignOrder(carlaPK, no, 16_000_000, 40_000_000, Side.BUY);\n        Order[] memory makerOrders = new Order[](2);\n        makerOrders[0] = yesSell;\n        makerOrders[1] = noBuy;\n\n        uint256[] memory fillAmounts = new uint256[](2);\n        fillAmounts[0] = 50_000_000;\n        fillAmounts[1] = 16_000_000;\n\n        uint256 takerOrderFillAmount = 49_000_000;\n\n        checkpointCollateral(carla);\n        checkpointCTF(bob, yes);\n        checkpointCTF(carla, no);\n\n        vm.prank(admin);\n        exchange.matchOrders(buy, makerOrders, takerOrderFillAmount, fillAmounts);\n\n        // Ensure balances have been updated post match\n        assertCTFBalance(bob, yes, 90_000_000);\n\n        assertCollateralBalance(carla, 9_000_000);\n        assertCTFBalance(carla, no, 40_000_000);\n\n        // Ensure onchain state for orders is as expected\n        // The taker order is partially filled\n        assertEq(exchange.getOrderStatus(exchange.hashOrder(buy)).remaining, 11_000_000);\n        assertFalse(exchange.getOrderStatus(exchange.hashOrder(buy)).isFilledOrCancelled);\n\n        // The maker orders get completely filled\n        assertEq(exchange.getOrderStatus(exchange.hashOrder(yesSell)).remaining, 0);\n        assertTrue(exchange.getOrderStatus(exchange.hashOrder(yesSell)).isFilledOrCancelled);\n\n        assertEq(exchange.getOrderStatus(exchange.hashOrder(noBuy)).remaining, 0);\n        assertTrue(exchange.getOrderStatus(exchange.hashOrder(noBuy)).isFilledOrCancelled);\n    }\n\n    function testMatchTypeMerge() public {\n        // Init Match with YES sell against a NO sell and a Yes buy\n        // To match the YES sell with the NO sell, CTF Exchange will MERGE Outcome tokens into collateral\n        // Then will fill the YES sell and the NO sell with the resulting collateral\n        Order memory yesSell = _createAndSignOrder(bobPK, yes, 100_000_000, 60_000_000, Side.SELL);\n\n        Order memory noSell = _createAndSignOrder(carlaPK, no, 75_000_000, 30_000_000, Side.SELL);\n\n        Order memory yesBuy = _createAndSignOrder(carlaPK, yes, 24_000_000, 40_000_000, Side.BUY);\n        Order[] memory makerOrders = new Order[](2);\n        makerOrders[0] = noSell;\n        makerOrders[1] = yesBuy;\n\n        uint256[] memory fillAmounts = new uint256[](2);\n        fillAmounts[0] = 75_000_000;\n        fillAmounts[1] = 15_000_000;\n\n        uint256 takerOrderFillAmount = 100_000_000;\n\n        checkpointCollateral(bob);\n\n        checkpointCTF(carla, yes);\n        checkpointCollateral(carla);\n\n        vm.prank(admin);\n        exchange.matchOrders(yesSell, makerOrders, takerOrderFillAmount, fillAmounts);\n\n        // Ensure balances have been updated post match\n        assertCollateralBalance(bob, 60_000_000);\n\n        assertCTFBalance(carla, yes, 25_000_000);\n        assertCollateralBalance(carla, 15_000_000);\n\n        // Ensure onchain state for orders is as expected\n        // The taker order is fully filled\n        assertEq(exchange.getOrderStatus(exchange.hashOrder(yesSell)).remaining, 0);\n        assertTrue(exchange.getOrderStatus(exchange.hashOrder(yesSell)).isFilledOrCancelled);\n\n        // The first maker order gets completely filled\n        assertEq(exchange.getOrderStatus(exchange.hashOrder(noSell)).remaining, 0);\n        assertTrue(exchange.getOrderStatus(exchange.hashOrder(noSell)).isFilledOrCancelled);\n\n        // The second maker order is partially filled\n        assertEq(exchange.getOrderStatus(exchange.hashOrder(yesBuy)).remaining, 9_000_000);\n        assertFalse(exchange.getOrderStatus(exchange.hashOrder(yesBuy)).isFilledOrCancelled);\n    }\n\n    function testMatchTypeComplementaryFuzz(uint128 fillAmount, uint16 takerFeeRateBps, uint16 makerFeeRateBps)\n        public\n    {\n        uint256 makerAmount = 50_000_000;\n        uint256 takerAmount = 100_000_000;\n\n        vm.assume(\n            fillAmount <= makerAmount && takerFeeRateBps < exchange.getMaxFeeRate()\n                && makerFeeRateBps < exchange.getMaxFeeRate()\n        );\n\n        // Init a match with a yes buy against a yes sell\n        Order memory buy = _createAndSignOrderWithFee(bobPK, yes, makerAmount, takerAmount, takerFeeRateBps, Side.BUY);\n        Order memory sell =\n            _createAndSignOrderWithFee(carlaPK, yes, takerAmount, makerAmount, makerFeeRateBps, Side.SELL);\n\n        Order[] memory makerOrders = new Order[](1);\n        makerOrders[0] = sell;\n\n        uint256[] memory fillAmounts = new uint256[](1);\n        uint256 makerFillAmount = _getTakingAmount(fillAmount, makerAmount, takerAmount);\n        fillAmounts[0] = makerFillAmount;\n\n        checkpointCollateral(carla);\n        checkpointCTF(bob, yes);\n\n        uint256 makerFee = calculateFee(makerFeeRateBps, makerFillAmount, sell.makerAmount, sell.takerAmount, sell.side);\n        if (makerFee > 0) {\n            vm.expectEmit(true, true, true, false);\n            emit FeeCharged(admin, 0, makerFee);\n        }\n\n        uint256 takerFee = calculateFee(takerFeeRateBps, fillAmount, fillAmount, makerFillAmount, buy.side);\n        if (takerFee > 0) {\n            // TakerFee could be >= expected taker fee due to surplus\n            vm.expectEmit(true, true, false, false);\n            emit FeeCharged(admin, buy.tokenId, takerFee);\n        }\n\n        vm.prank(admin);\n        exchange.matchOrders(buy, makerOrders, fillAmount, fillAmounts);\n\n        // Ensure balances have been updated post match\n        assertCollateralBalance(carla, fillAmount - makerFee);\n        assertGe(getCTFBalance(bob, yes), makerFillAmount);\n    }\n\n    function testMatchTypeMintFuzz(uint128 fillAmount, uint16 takerFeeRateBps, uint16 makerFeeRateBps) public {\n        uint256 makerAmount = 50_000_000;\n        uint256 takerAmount = 100_000_000;\n\n        vm.assume(\n            fillAmount <= makerAmount && takerFeeRateBps < exchange.getMaxFeeRate()\n                && makerFeeRateBps < exchange.getMaxFeeRate()\n        );\n\n        // Init a match with a YES buy against a NO buy\n        Order memory yesBuy =\n            _createAndSignOrderWithFee(bobPK, yes, makerAmount, takerAmount, takerFeeRateBps, Side.BUY);\n\n        Order memory noBuy =\n            _createAndSignOrderWithFee(carlaPK, no, makerAmount, takerAmount, makerFeeRateBps, Side.BUY);\n\n        Order[] memory makerOrders = new Order[](1);\n        makerOrders[0] = noBuy;\n\n        uint256[] memory fillAmounts = new uint256[](1);\n        fillAmounts[0] = fillAmount;\n\n        uint256 taking = _getTakingAmount(fillAmount, makerAmount, takerAmount);\n\n        uint256 makerFee = calculateFee(makerFeeRateBps, taking, noBuy.makerAmount, noBuy.takerAmount, noBuy.side);\n        if (makerFee > 0) {\n            vm.expectEmit(true, true, true, false);\n            emit FeeCharged(admin, yes, makerFee);\n        }\n\n        uint256 takerFee = calculateFee(takerFeeRateBps, taking, fillAmount, taking, yesBuy.side);\n        if (takerFee > 0) {\n            vm.expectEmit(true, true, true, false);\n            emit FeeCharged(admin, no, takerFee);\n        }\n\n        checkpointCTF(carla, no);\n        checkpointCTF(bob, yes);\n\n        vm.prank(admin);\n        exchange.matchOrders(yesBuy, makerOrders, fillAmount, fillAmounts);\n\n        // Ensure balances have been updated post match\n        assertCTFBalance(carla, no, taking - makerFee);\n        assertCTFBalance(bob, yes, taking - takerFee);\n    }\n\n    function testMatchTypeMergeFuzz(uint128 fillAmount, uint16 takerFeeRateBps, uint16 makerFeeRateBps) public {\n        uint256 makerAmount = 100_000_000;\n        uint256 takerAmount = 50_000_000;\n\n        vm.assume(\n            fillAmount <= makerAmount && takerFeeRateBps < exchange.getMaxFeeRate()\n                && makerFeeRateBps < exchange.getMaxFeeRate()\n        );\n\n        // Init a match with a YES sell against a NO sell\n        Order memory yesSell =\n            _createAndSignOrderWithFee(bobPK, yes, makerAmount, takerAmount, takerFeeRateBps, Side.SELL);\n\n        Order memory noSell =\n            _createAndSignOrderWithFee(carlaPK, no, makerAmount, takerAmount, makerFeeRateBps, Side.SELL);\n\n        Order[] memory makerOrders = new Order[](1);\n        makerOrders[0] = noSell;\n\n        uint256[] memory fillAmounts = new uint256[](1);\n        fillAmounts[0] = fillAmount;\n        uint256 taking = _getTakingAmount(fillAmount, makerAmount, takerAmount);\n\n        uint256 makerFee =\n            calculateFee(makerFeeRateBps, fillAmount, noSell.makerAmount, noSell.takerAmount, noSell.side);\n        if (makerFee > 0) {\n            vm.expectEmit(true, true, true, true);\n            emit FeeCharged(admin, 0, makerFee);\n        }\n\n        uint256 takerFee = calculateFee(takerFeeRateBps, fillAmount, fillAmount, taking, yesSell.side);\n        if (takerFee > 0) {\n            // TakerFee could be >= expected taker fee due to surplus\n            vm.expectEmit(true, true, true, false);\n            emit FeeCharged(admin, 0, takerFee);\n        }\n\n        checkpointCollateral(carla);\n        checkpointCollateral(bob);\n\n        vm.prank(admin);\n        exchange.matchOrders(yesSell, makerOrders, fillAmount, fillAmounts);\n\n        // Ensure balances have been updated post match\n        assertCollateralBalance(carla, taking - makerFee);\n        assertGe(usdc.balanceOf(bob), taking - takerFee);\n    }\n\n    function testTakerRefund() public {\n        // Init match with takerFillAmount >> amount needed to fill the maker orders\n        // The excess tokens should be refunded to the taker\n        Order memory buy = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n\n        Order memory sell = _createAndSignOrder(carlaPK, yes, 100_000_000, 40_000_000, Side.SELL);\n        Order[] memory makerOrders = new Order[](1);\n        makerOrders[0] = sell;\n\n        uint256[] memory fillAmounts = new uint256[](1);\n        fillAmounts[0] = 100_000_000;\n\n        // If fill amount is miscalculated, refund the caller any leftover tokens\n        // In this test, 40 USDC is needed to fill the sell.\n        // The Exchange will refund the taker order maker 10 USDC\n        uint256 takerFillAmount = 50_000_000;\n        uint256 expectedRefund = 10_000_000;\n\n        vm.expectEmit(true, true, true, false);\n        // Assert the refund transfer to the taker order maker\n        emit Transfer(address(exchange), bob, expectedRefund);\n\n        vm.prank(admin);\n        exchange.matchOrders(buy, makerOrders, takerFillAmount, fillAmounts);\n    }\n\n    function testWithFees() public {\n        vm.startPrank(admin);\n\n        // Init a yes BUY taker order at 50c with a 10% taker fee\n        uint256 takerFeeRate = 1000;\n        Order memory buy = _createAndSignOrderWithFee(\n            bobPK,\n            yes,\n            50_000_000,\n            100_000_000,\n            takerFeeRate, // Taker fee of 10%\n            Side.BUY\n        );\n\n        // Init a yes SELL order at 50c with a 1% maker fee\n        uint256 makerFeeRate = 100;\n        Order memory sell = _createAndSignOrderWithFee(\n            carlaPK,\n            yes,\n            100_000_000,\n            50_000_000,\n            makerFeeRate, // Maker fee of 1%\n            Side.SELL\n        );\n\n        Order[] memory makerOrders = new Order[](1);\n        makerOrders[0] = sell;\n        uint256[] memory fillAmounts = new uint256[](1);\n        fillAmounts[0] = 50_000_000;\n\n        uint256 takerFillAmount = 25_000_000;\n        uint256 expectedTakerFee = calculateFee(takerFeeRate, 50_000_000, buy.makerAmount, buy.takerAmount, buy.side);\n        uint256 expectedMakerFee = calculateFee(makerFeeRate, 50_000_000, sell.makerAmount, sell.takerAmount, sell.side);\n\n        if (expectedMakerFee > 0) {\n            vm.expectEmit(true, true, true, false);\n            emit FeeCharged(admin, yes, expectedMakerFee);\n        }\n\n        vm.expectEmit(true, true, true, true);\n        emit OrderFilled(exchange.hashOrder(sell), carla, bob, yes, 0, 50_000_000, 25_000_000, expectedMakerFee);\n\n        if (expectedMakerFee > 0) {\n            vm.expectEmit(true, true, true, false);\n            emit FeeCharged(admin, yes, expectedTakerFee);\n        }\n\n        vm.expectEmit(true, true, true, true);\n        emit OrderFilled(\n            exchange.hashOrder(buy), bob, address(exchange), 0, yes, 25_000_000, 50_000_000, expectedTakerFee\n        );\n\n        // Match the orders\n        exchange.matchOrders(buy, makerOrders, takerFillAmount, fillAmounts);\n    }\n\n    function testWithFeesWithSurplus() public {\n        vm.startPrank(admin);\n\n        // Init a yes SELL taker order at 50c with a 1% taker fee\n        uint256 takerFeeRate = 100;\n        Order memory sell = _createAndSignOrderWithFee(\n            bobPK,\n            yes,\n            100_000_000,\n            50_000_000,\n            takerFeeRate, // Taker fee of 1%\n            Side.SELL\n        );\n\n        // Init a yes BUY order at 60c with a 0% maker fee\n        uint256 makerFeeRate = 0;\n        Order memory buy = _createAndSignOrderWithFee(carlaPK, yes, 60_000_000, 100_000_000, makerFeeRate, Side.BUY);\n\n        Order[] memory makerOrders = new Order[](1);\n        makerOrders[0] = buy;\n\n        uint256[] memory fillAmounts = new uint256[](1);\n        fillAmounts[0] = 60_000_000;\n\n        uint256 takerFillAmount = 100_000_000;\n\n        // NOTE: the fee is calculated on the *actual* fill price, vs the price implied by the sell order\n        // thus the fee is inclusive of any surplus/price improvements generated\n        uint256 expectedTakerFee = calculateFee(takerFeeRate, takerFillAmount, 100_000_000, 60_000_000, sell.side);\n        uint256 expectedMakerFee =\n            calculateFee(makerFeeRate, takerFillAmount, buy.makerAmount, buy.takerAmount, buy.side);\n\n        vm.expectEmit(true, true, true, true);\n        emit OrderFilled(exchange.hashOrder(buy), carla, bob, 0, yes, 60_000_000, 100_000_000, expectedMakerFee);\n\n        if (expectedTakerFee > 0) {\n            vm.expectEmit(true, true, true, true);\n            emit FeeCharged(admin, 0, expectedTakerFee);\n        }\n\n        vm.expectEmit(true, true, true, true);\n        emit OrderFilled(exchange.hashOrder(sell), bob, address(exchange), yes, 0, 100_000_000, 60_000_000, expectedTakerFee);\n\n        vm.expectEmit(true, true, true, true);\n        emit OrdersMatched(exchange.hashOrder(sell), bob, yes, 0, 100_000_000, 60_000_000);\n\n        // Match the orders\n        exchange.matchOrders(sell, makerOrders, takerFillAmount, fillAmounts);\n    }\n\n    function testMintWithFees() public {\n        vm.startPrank(admin);\n\n        // Init a YES BUY taker order at 50c with a 1% taker fee\n        uint256 takerFeeRate = 100;\n        Order memory buy = _createAndSignOrderWithFee(\n            bobPK,\n            yes,\n            50_000_000,\n            100_000_000,\n            takerFeeRate, // Taker fee of 1%\n            Side.BUY\n        );\n\n        // Init a NO BUY order at 50c with a 0.3% maker fee\n        uint256 makerFeeRate = 30;\n        Order memory noBuy = _createAndSignOrderWithFee(\n            carlaPK,\n            no,\n            50_000_000,\n            100_000_000,\n            makerFeeRate, // Maker fee of 0.3%\n            Side.BUY\n        );\n\n        Order[] memory makerOrders = new Order[](1);\n        makerOrders[0] = noBuy;\n\n        uint256[] memory fillAmounts = new uint256[](1);\n        fillAmounts[0] = 50_000_000;\n\n        uint256 takerFillAmount = 50_000_000;\n\n        uint256 expectedTakerFee = calculateFee(takerFeeRate, 100_000_000, buy.makerAmount, buy.takerAmount, buy.side);\n        uint256 expectedMakerFee =\n            calculateFee(makerFeeRate, 100_000_000, noBuy.makerAmount, noBuy.takerAmount, noBuy.side);\n\n        vm.expectEmit(true, true, true, true);\n        emit FeeCharged(admin, no, expectedMakerFee);\n\n        vm.expectEmit(true, true, true, true);\n        emit OrderFilled(exchange.hashOrder(noBuy), carla, bob, 0, no, 50_000_000, 100_000_000, expectedMakerFee);\n\n        vm.expectEmit(true, true, true, true);\n        emit FeeCharged(admin, yes, expectedTakerFee);\n\n        vm.expectEmit(true, true, true, true);\n        emit OrderFilled(exchange.hashOrder(buy), bob, address(exchange), 0, yes, 50_000_000, 100_000_000, expectedTakerFee);\n\n        // Match the orders\n        exchange.matchOrders(buy, makerOrders, takerFillAmount, fillAmounts);\n\n        assertCTFBalance(admin, yes, expectedTakerFee);\n        assertCTFBalance(admin, no, expectedMakerFee);\n    }\n\n    function testMergeWithFees() public {\n        vm.startPrank(admin);\n\n        // Init a YES SELL taker order at 50c with a 1% taker fee\n        uint256 takerFeeRate = 100;\n        Order memory yesSell = _createAndSignOrderWithFee(\n            bobPK,\n            yes,\n            100_000_000,\n            50_000_000,\n            takerFeeRate, // Taker fee of 1%\n            Side.SELL\n        );\n\n        // Init a NO SELL order at 50c with a 0.3% maker fee\n        uint256 makerFeeRate = 30;\n        Order memory noSell = _createAndSignOrderWithFee(\n            carlaPK,\n            no,\n            100_000_000,\n            50_000_000,\n            makerFeeRate, // Maker fee of 0.3%\n            Side.SELL\n        );\n\n        Order[] memory makerOrders = new Order[](1);\n        makerOrders[0] = noSell;\n\n        uint256[] memory fillAmounts = new uint256[](1);\n        fillAmounts[0] = 100_000_000;\n\n        uint256 takerFillAmount = 100_000_000;\n\n        uint256 expectedTakerFee =\n            calculateFee(takerFeeRate, 100_000_000, yesSell.makerAmount, yesSell.takerAmount, yesSell.side);\n        uint256 expectedMakerFee =\n            calculateFee(makerFeeRate, 100_000_000, noSell.makerAmount, noSell.takerAmount, noSell.side);\n\n        vm.expectEmit(true, true, true, true);\n        emit FeeCharged(admin, 0, expectedMakerFee);\n\n        vm.expectEmit(true, true, true, true);\n        emit OrderFilled(exchange.hashOrder(noSell), carla, bob, no, 0, 100_000_000, 50_000_000, expectedMakerFee);\n\n        vm.expectEmit(true, true, true, true);\n        emit FeeCharged(admin, 0, expectedTakerFee);\n\n        vm.expectEmit(true, true, true, true);\n        emit OrderFilled(exchange.hashOrder(yesSell), bob, address(exchange), yes, 0, 100_000_000, 50_000_000, expectedTakerFee);\n\n        // Match the orders\n        exchange.matchOrders(yesSell, makerOrders, takerFillAmount, fillAmounts);\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                               FAIL CASES\n    //////////////////////////////////////////////////////////////*/\n\n    function testNotCrossingSells() public {\n        // 60c YES sell\n        Order memory yesSell = _createAndSignOrder(bobPK, yes, 100_000_000, 60_000_000, Side.SELL);\n\n        // 60c NO sell\n        Order memory noSell = _createAndSignOrder(carlaPK, no, 100_000_000, 60_000_000, Side.SELL);\n\n        Order[] memory makerOrders = new Order[](1);\n        makerOrders[0] = noSell;\n\n        uint256[] memory fillAmounts = new uint256[](1);\n        fillAmounts[0] = 100_000_000;\n\n        uint256 takerOrderFillAmount = 100_000_000;\n\n        // Sells can only match if priceYesSell + priceNoSell < 1\n        vm.expectRevert(NotCrossing.selector);\n        vm.prank(admin);\n        exchange.matchOrders(yesSell, makerOrders, takerOrderFillAmount, fillAmounts);\n    }\n\n    function testNotCrossingBuys() public {\n        // 50c YES buy\n        Order memory yesBuy = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n\n        // 40c NO buy\n        Order memory noBuy = _createAndSignOrder(carlaPK, no, 40_000_000, 100_000_000, Side.BUY);\n\n        Order[] memory makerOrders = new Order[](1);\n        makerOrders[0] = noBuy;\n\n        uint256[] memory fillAmounts = new uint256[](1);\n        fillAmounts[0] = 40_000_000;\n\n        uint256 takerOrderFillAmount = 50_000_000;\n\n        // Buys can only match if priceYesBuy + priceNoBuy > 1\n        vm.expectRevert(NotCrossing.selector);\n        vm.prank(admin);\n        exchange.matchOrders(yesBuy, makerOrders, takerOrderFillAmount, fillAmounts);\n    }\n\n    function testNotCrossingBuyVsSell() public {\n        // 50c YES buy\n        Order memory buy = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n\n        // 60c YES sell\n        Order memory sell = _createAndSignOrder(carlaPK, no, 100_000_000, 60_000_000, Side.SELL);\n\n        Order[] memory makerOrders = new Order[](1);\n        makerOrders[0] = sell;\n\n        uint256[] memory fillAmounts = new uint256[](1);\n        fillAmounts[0] = 0;\n\n        uint256 takerOrderFillAmount = 0;\n\n        vm.expectRevert(NotCrossing.selector);\n        vm.prank(admin);\n        exchange.matchOrders(buy, makerOrders, takerOrderFillAmount, fillAmounts);\n    }\n\n    function testInvalidTrade() public {\n        Order memory buy = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n        Order memory sell = _createAndSignOrder(carlaPK, no, 100_000_000, 50_000_000, Side.SELL);\n\n        Order[] memory makerOrders = new Order[](1);\n        makerOrders[0] = sell;\n\n        uint256[] memory fillAmounts = new uint256[](1);\n        fillAmounts[0] = 100_000_000;\n\n        uint256 takerOrderFillAmount = 50_000_000;\n\n        // Attempt to match a yes buy with a no sell, reverts as this is invalid\n        vm.expectRevert(MismatchedTokenIds.selector);\n        vm.prank(admin);\n        exchange.matchOrders(buy, makerOrders, takerOrderFillAmount, fillAmounts);\n    }\n\n    function testMatchNonTaker() public {\n        Order memory buy = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n        buy.taker = carla;\n        buy.signature = _signMessage(bobPK, exchange.hashOrder(buy));\n\n        // Sell with taker zero\n        Order memory sell = _createAndSignOrder(carlaPK, yes, 100_000_000, 50_000_000, Side.SELL);\n\n        Order[] memory makerOrders = new Order[](1);\n        makerOrders[0] = sell;\n\n        uint256[] memory fillAmounts = new uint256[](1);\n        fillAmounts[0] = 100_000_000;\n\n        uint256 takerOrderFillAmount = 50_000_000;\n\n        // Attempt to match orders with admin, incompatible with the taker for the buy order\n        // Reverts\n        vm.expectRevert(NotTaker.selector);\n        vm.prank(admin);\n        exchange.matchOrders(buy, makerOrders, takerOrderFillAmount, fillAmounts);\n\n        // Matching with carla suceeds as expected\n        vm.expectEmit(true, true, true, true);\n        emit OrdersMatched(exchange.hashOrder(buy), bob, 0, yes, 50_000_000, 100_000_000);\n        vm.prank(carla);\n        exchange.matchOrders(buy, makerOrders, takerOrderFillAmount, fillAmounts);\n    }\n\n    function testMatchZeroTakerAmount() public {\n        // Create a non-standard buy order with zero taker amount\n        Order memory buy = _createAndSignOrder(bobPK, yes, 50_000_000, 0, Side.BUY);\n\n        // Any valid sell order will be able to drain the buy order\n        // Init a sell order priced absurdly high\n        Order memory sell = _createAndSignOrder(carlaPK, yes, 1, 50_000_000, Side.SELL);\n\n        Order[] memory makerOrders = new Order[](1);\n        makerOrders[0] = sell;\n\n        uint256[] memory fillAmounts = new uint256[](1);\n        fillAmounts[0] = 1;\n\n        uint256 takerOrderFillAmount = 50_000_000;\n\n        vm.expectEmit(true, true, true, true);\n        emit OrdersMatched(exchange.hashOrder(buy), bob, 0, yes, 50_000_000, 1);\n\n        // The orders are successfully matched\n        vm.prank(admin);\n        exchange.matchOrders(buy, makerOrders, takerOrderFillAmount, fillAmounts);\n    }\n\n    function testMatchInvalidFillAmount() public {\n        Order memory buy = _createAndSignOrder(bobPK, yes, 50_000_000, 100_000_000, Side.BUY);\n\n        Order memory sell = _createAndSignOrder(carlaPK, yes, 1_000_000_000, 500_000_000, Side.SELL);\n\n        Order[] memory makerOrders = new Order[](1);\n        makerOrders[0] = sell;\n\n        uint256[] memory fillAmounts = new uint256[](1);\n        fillAmounts[0] = 1_000_000_000;\n\n        uint256 takerOrderFillAmount = 500_000_000;\n\n        // Attempt to match the above buy and sell, with fillAmount >>> the maker amount of the buy\n        // Reverts\n        vm.expectRevert(MakingGtRemaining.selector);\n        vm.prank(admin);\n        exchange.matchOrders(buy, makerOrders, takerOrderFillAmount, fillAmounts);\n    }\n}\n"
  },
  {
    "path": "src/exchange/test/libraries/CalculatorHelper.t.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity <0.9.0;\n\nimport { Test } from \"forge-std/Test.sol\";\n\nimport { CalculatorHelper } from \"exchange/libraries/CalculatorHelper.sol\";\nimport { Side } from \"exchange/libraries/OrderStructs.sol\";\n\ncontract CalculatorHelperTest is Test {\n    function testFuzzCalculateTakingAmount(uint64 making, uint128 makerAmount, uint128 takerAmount) public {\n        vm.assume(makerAmount > 0 && making <= makerAmount);\n        // Explicitly cast to 256 to avoid overflows\n        uint256 expected = making * uint256(takerAmount) / uint256(makerAmount);\n        assertEq(CalculatorHelper.calculateTakingAmount(making, makerAmount, takerAmount), expected);\n    }\n\n    function testFuzzCalculatePrice(uint128 makerAmount, uint128 takerAmount, uint8 sideInt) public {\n        vm.assume(sideInt <= 1);\n        Side side = Side(sideInt);\n        // Asserts not needed, test checks that we can calculate price safely without unexpected reverts\n\n        CalculatorHelper._calculatePrice(makerAmount, takerAmount, side);\n    }\n\n    function testFuzzIsCrossing(\n        uint128 makerAmountA,\n        uint128 takerAmountA,\n        uint8 sideIntA,\n        uint128 makerAmountB,\n        uint128 takerAmountB,\n        uint8 sideIntB\n    ) public {\n        vm.assume(sideIntA <= 1 && sideIntB <= 1);\n        Side sideA = Side(sideIntA);\n        Side sideB = Side(sideIntB);\n        uint256 priceA = CalculatorHelper._calculatePrice(makerAmountA, takerAmountA, sideA);\n        uint256 priceB = CalculatorHelper._calculatePrice(makerAmountB, takerAmountB, sideB);\n\n        // Asserts not needed, test checks that we can check isCrossing safely without unexpected reverts\n        CalculatorHelper._isCrossing(priceA, priceB, sideA, sideB);\n    }\n}\n"
  }
]