diff --git a/.gitignore b/.gitignore index 2ee930a..cb71980 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ __pycache__ artifacts lib typechain +subgraph.yaml # dependencies node_modules diff --git a/README.md b/README.md index 40a561f..8c65e7d 100644 --- a/README.md +++ b/README.md @@ -18,12 +18,11 @@ With 380,000 corporations maintaining their shareholder books, BRØK aims to cre ## Architecture -BRØK's architecture includes three key components: +BRØK's architecture includes four key components: - **Blockchain**: Rules defined by [smart contracts](https://no.wikipedia.org/wiki/Smart_kontrakt) and secure references to ownership. See `packages/captable` - **TheGraph**: Enables efficient data queries from the blockchain. See `packages/graph` - **API**: Allows secure data access and updates through standard web technology. See `packages/api` - **BR Name Service**: Provides a [service for looking up BRØK addresses](https://github.com/brreg/brok-navnetjener). -- **Fagsystem DEMO**: Integrates with BRØK, enabling the publishing of ownership details. Without a front-end like this, BRØK is not useful. [Here's an example of a front-end for a fagsystem.](https://github.com/brreg/brok-fagsystem-demo) # Quick setup diff --git a/docker-compose.yaml b/docker-compose.yaml index d9a50dd..34ed6ca 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -75,7 +75,7 @@ services: depends_on: - hardhat environment: - CONTAINER_HARDHAT: http://hardhat:8545 + RPC_CONTAINER: http://hardhat:8545 command: ["sh", "-c", "sleep 15 && pnpm -F @brok/captable hardhat-deploy-contracts-container && pnpm -F @brok/captable hardhat-add-demo-data-container"] postgres: image: postgres diff --git a/packages/api/README.md b/packages/api/README.md new file mode 100644 index 0000000..4bbdcb8 --- /dev/null +++ b/packages/api/README.md @@ -0,0 +1,57 @@ +# Brøk API +Creates a simplified interface for enterprise systems, so they can use BRØK without the need for any knowledge or system implementation of web3 technologies. + +Built with Next.js framework. + +Remember to complete the steps described [here](./../../README.md#development) before running this application the first time. + +The chapter on .env describes how this application is configured to connect to other application. + + +## Application endpoints overview + +``/api/health`` Checks the status for the external connection, and ethereum balance + +``/api/checkTransaction`` Checks the status of a transaction + +``/api/v1/company/`` Control the CapTable for a company + +``/api/v1/person/`` Get the ownership information for a person or company owning shares + +For more explanation, check out the [swagger file](./../../docs/swagger.yaml) + + +## External applications + +This application depends on the following to work properly: +- an Ethereum network, either Hardhat network running locally, or Arbitrum Goerli/Sepolia/One +- The Graph subgraph for CapTableRegistry +- Navnetjener API + +To start Hardhat network and The Graph services locally, run the vs code task `deploy-local` + +To start Navnetjener, follow [these instructions](https://github.com/brreg/brok-navnetjener#development-setup) + + +## .env +The .env files uses the following values: + +| **Value** | **Description** | +|--|--| +| `PRIVATE_KEY` | The Private key for the wallet used by Brøk API, intended to be provided by Brønnøysundregistrene in the future | +| `RPC_LOCAL` | Network address to the Hardhat network | +| `RPC_SEPOLIA` | Network address to the Arbitrum Sepolia network | +| `RPC_GOERLI` | Network address to the Arbitrum Goerli network | +| `RPC_ONE` | Network address to the Arbitrum One network | +| `PORT` | Port for the API | +| `NAVNETJENER_URL` | URL to Navnetjener API | +| `BROK_ENV` | Selects Ethereum network, valid arguments: `localhost`, `brokStage` or `brokProd` | +| `DEBUG` | Select what part of the application you want to debug, default to `brok*` for the whole application | +| `THE_GRAPH_URL` | URL to The Graph subgraph | + + +# Development + +Start dev server: `pnpm run dev` + +Run all tests: `pnpm run test` \ No newline at end of file diff --git a/packages/captable/.env.example b/packages/captable/.env.example index 11aed5c..6b267b4 100644 --- a/packages/captable/.env.example +++ b/packages/captable/.env.example @@ -6,7 +6,7 @@ SEED_PROD=test test test test test test test test test test test junk RPC_CONTAINER=http://host.docker.internal:8545 RPC_LOCAL=http://127.0.0.1:8545 RPC_TESTNET=http://127.0.0.1:8545 +RPC_STAGENET=http://127.0.0.1:8545 RPC_MAINNET=http://127.0.0.1:8545 REPORT_GAS=false -CAP_TABLE_REGISTRY_brokDev=0x8EF52e971B7Aa8f263A7C25b0F4e200709287A30 -DEV_ENTERPRISE_SYSTEM_ADDRESS=0x0a665B1Bc813cAE9fcDd2Eb7E25b8E55A5F35f23 \ No newline at end of file +DEV_ENTERPRISE_SYSTEM_ADDRESS=0x4cCE8E0e2Ba902FE7D2D1fD894d85883E7cd720d \ No newline at end of file diff --git a/packages/captable/README.md b/packages/captable/README.md index 8b541f9..40ea115 100644 --- a/packages/captable/README.md +++ b/packages/captable/README.md @@ -1,4 +1,55 @@ # Smart contracts for CapTable BRØK -NB! brokProd is still against Arbitrum Goerli +Smart contracts for CapTable and CapTableRegistry developed in [Solidity v0.8.0](https://docs.soliditylang.org/en/v0.8.0/) +Based on [ERC1400](https://consensys.io/staking/assets/universal-token), but intended to migrate to [ERC3643](https://www.erc3643.org/) in the future. + +The contracts are built and tested with [Hardhat](https://hardhat.org/hardhat-runner/docs/getting-started#overview) + +Based on the generated contracts, [tsup](https://www.npmjs.com/package/tsup) is used to generate a TypeScript library, to be used by Brøk API and The Graph configuration. + +***Note: 'brokProd' is currently configured to run on the deprecated Arbitrum Goerli network. In future versions we might transition to Sepolia.*** + +## Project overview + +| **Folder** | **Description** | +|--|--| +| `artifacts/` | Compiled artifacts generated by Hardhat compile (generated) | +| `cache/` | The directory used by Hardhat to cache its internal stuff (generated) | +| `contracts/` | CapTable and CapTableRegistry contracts in Solidity, with dependencies | +| `deployments/` | Our way to persist smart contract addresses deployed on Arbitrum, generated by [./tasks/generate-deployments.ts](./tasks/generate-deployments.ts) | +| `dist/` | Generated TypeScript library of CapTable and CapTableRegistry (generated) | +| `scripts/` | I dont know what this does | +| `tasks/` | Hardhat tasks to be run with ``hardhat --network --log`` +| `test/` | Tests for CapTable and CapTableRegistry | +| `typechain-types/` | Generated TypeScript bindings for smart contracts (generated) | + + +### .env +| **Value** | **Description** | +|--|--| +| `ETHERSCAN_API_KEY` | Used for verifying that the contract's source code matches the executed bytecode onchain, makes the source code viewable on Etherscan and makes it possible to execute smart contract functions directly from Etherscan. | +| `SEED_DEV` | Mnemonic key for Brønnøysundregistrenes wallet used to deploy contracts in the dev environment | +| `SEED_STAGE` | Mnemonic key for Brønnøysundregistrenes wallet used to deploy contracts in the stage environment | +| `SEED_PROD` | Mnemonic key for Brønnøysundregistrenes wallet used to deploy contracts in the production environment **NB: contains real money** | +| `RPC_CONTAINER` | Network address to Hardhat network running with `docker-compose` | +| `RPC_LOCAL` | Network address to Hardhat network running local | +| `RPC_TESTNET` | Network address to the Arbitrum Goerli network | +| `RPC_STAGENET` | Network address to the Arbitrum One network | +| `RPC_MAINNET` | Network address to the Arbitrum One network | +| `CONTRACT_SIZER` | Boolean for turning on verbose compilation where contract sizes are being outputted when they are compiled. | +| `REPORT_GAS` | Same as `CONTRACT_SIZER` but with finer granularity output. This outputs gas used for each test and every smart contract method | +| `DEV_ENTERPRISE_SYSTEM_ADDRESS` | Give this wallet address the permission to publish CapTables to the CapTableRegistry | + + +## Hardhat networks +There are several hardhat networks configured in [hardhat.config.ts](./hardhat.config.ts#L83). These networks are configured to use a url from the .env file `RPC_*` and mnemonic frases, `SEED_*`, to access the account on the network used to deploy the smart contracts. + +**Be very careful about the `SEED_PROD` because this wallet holds real money, they will be quickly stolen if the key is leaked to the public!** + +These networks are used in the Hardhat cli as `hardhat --network ` e.g. `hardhat --network brokStage` + +## Deployment prosess +To deploy the smart contracts to production, run `pnpm hardhat-deploy-contracts-production`, + +Again, make sure the `.env` file holds the correct values **before** running this command \ No newline at end of file diff --git a/packages/captable/scripts/deploy.ts b/packages/captable/scripts/deploy.ts deleted file mode 100644 index 6cdf2cb..0000000 --- a/packages/captable/scripts/deploy.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ethers } from "hardhat"; - -async function main() { - const currentTimestampInSeconds = Math.round(Date.now() / 1000); - const ONE_YEAR_IN_SECS = 365 * 24 * 60 * 60; - const unlockTime = currentTimestampInSeconds + ONE_YEAR_IN_SECS; - - const lockedAmount = ethers.utils.parseEther("1"); - - const Lock = await ethers.getContractFactory("Lock"); - const lock = await Lock.deploy(unlockTime, { value: lockedAmount }); - - await lock.deployed(); - - console.log(`Lock with 1 ETH and unlock timestamp ${unlockTime} deployed to ${lock.address}`); -} - -// We recommend this pattern to be able to use async/await everywhere -// and properly handle errors. -main().catch((error) => { - console.error(error); - process.exitCode = 1; -}); diff --git a/packages/graph/README.md b/packages/graph/README.md index dfc31dd..ac59e90 100644 --- a/packages/graph/README.md +++ b/packages/graph/README.md @@ -1,7 +1,28 @@ -# DEV +# Search indexing for CapTableRegistry BRØK -Make sure the correct CapTableRegistry is sert in config +The Graph is an indexing protocol for organizing blockchain data and making it easily accessible with GraphQL. -Create a subgraph at https://thegraph.com/legacy-explorer/ +The Graph makes it possible to query data that is difficult to query directly. -Change the NPM command to reflect new subgraph, then run `yarn run brokDev:deploy` +The Graph learns what and how to index Ethereum data based on subgraph descriptions, known as the subgraph manifest. The subgraph description defines the smart contracts of interest for a subgraph, the events in those contracts to pay attention to, and how to map event data to data that The Graph will store in its database. + +Once you have written a `subgraph manifest`, you use the Graph CLI to store the definition in IPFS and tell the indexer to start indexing data for that subgraph. + +This diagram gives more detail about the flow of data once a subgraph manifest has been deployed, dealing with Ethereum transactions: + + +## Project overview + +| **Folder** | **Description** | +|--|--| +| `abis/` | ABIS files for CapTable and CapTableRegistry, ***NB: These files are generated and copy manually*** | +| `build/` | Generated files from `graph codegen && graph build`, based on the content of `subgraph.yaml` | +| `docker-compose/` | Specs for running TheGraph locally with Docker compose | +| `generated/` | Some manually generated files @jon ? | +| `podman-compose/` | Specs for running TheGraph locally with Podman compose +| `scripts/` | Takes constant variables from `packages/captable/deployment/` and creates `subgraph.yaml` | +| `src/` | Some more files copy @jon ? | +| `tests/` | I dont know @jon ? | + +## Deployment prosess +To deploy subgraph to The Graph hosted services. update the deployment name in `package.json` and run one of the `deploy:*` commands \ No newline at end of file diff --git a/packages/graph/abis/CapTable.json b/packages/graph/abis/CapTable.json deleted file mode 100644 index 4a57cc8..0000000 --- a/packages/graph/abis/CapTable.json +++ /dev/null @@ -1,1876 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "CapTable", - "sourceName": "contracts/capTable/CapTable.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "orgnr", - "type": "string" - }, - { - "internalType": "uint256", - "name": "granularity", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "controllers", - "type": "address[]" - }, - { - "internalType": "bytes32[]", - "name": "defaultPartitions", - "type": "bytes32[]" - }, - { - "internalType": "address", - "name": "capTableRegistry", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "ApprovalByPartition", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "tokenHolder", - "type": "address" - } - ], - "name": "AuthorizedOperator", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "tokenHolder", - "type": "address" - } - ], - "name": "AuthorizedOperatorByPartition", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "string", - "name": "orgnr", - "type": "string" - }, - { - "indexed": true, - "internalType": "address", - "name": "oldFagsystem", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newFagsystem", - "type": "address" - } - ], - "name": "CaptableChangedFagsystem", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "fromPartition", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "toPartition", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "ChangedPartition", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "name", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "string", - "name": "uri", - "type": "string" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "documentHash", - "type": "bytes32" - } - ], - "name": "DocumentRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "name", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "string", - "name": "uri", - "type": "string" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "documentHash", - "type": "bytes32" - } - ], - "name": "DocumentUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "Issued", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "operatorData", - "type": "bytes" - } - ], - "name": "IssuedByPartition", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "MinterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "MinterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "string", - "name": "orgnr", - "type": "string" - }, - { - "indexed": true, - "internalType": "address", - "name": "fagsystem", - "type": "address" - } - ], - "name": "NewCapTable", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "Redeemed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "operatorData", - "type": "bytes" - } - ], - "name": "RedeemedByPartition", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "tokenHolder", - "type": "address" - } - ], - "name": "RevokedOperator", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "tokenHolder", - "type": "address" - } - ], - "name": "RevokedOperatorByPartition", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "fromPartition", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "operatorData", - "type": "bytes" - } - ], - "name": "TransferByPartition", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowanceByPartition", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approveByPartition", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "authorizeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "authorizeOperatorByPartition", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "tokenHolder", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenHolder", - "type": "address" - } - ], - "name": "balanceOfByPartition", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "interfaceHash", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "canImplementInterfaceForAddress", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "controllers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - } - ], - "name": "controllersByPartition", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "domainName", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "domainSeparator", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domainVersion", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "generateDomainSeparator", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAllDocuments", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDefaultPartitions", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "documentName", - "type": "bytes32" - } - ], - "name": "getDocument", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getFagsystem", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getFagsystemDid", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getOrgnr", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "granularity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isControllable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isIssuable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isMinter", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenHolder", - "type": "address" - } - ], - "name": "isOperator", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenHolder", - "type": "address" - } - ], - "name": "isOperatorForPartition", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "tokenHolder", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "issue", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenHolder", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "issueByPartition", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "partition", - "type": "bytes32[]" - }, - { - "internalType": "address[]", - "name": "to", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "kapitalforhoyselse_nye_aksjer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "partition", - "type": "bytes32[]" - }, - { - "internalType": "address[]", - "name": "from", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "operatorData", - "type": "bytes" - } - ], - "name": "kapitalnedsettelse_reduksjon_aksjer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newContractAddress", - "type": "address" - }, - { - "internalType": "bool", - "name": "definitive", - "type": "bool" - } - ], - "name": "migrate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenHolder", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "operatorData", - "type": "bytes" - } - ], - "name": "operatorRedeemByPartition", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "operatorData", - "type": "bytes" - } - ], - "name": "operatorTransferByPartition", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "tokenHolder", - "type": "address" - } - ], - "name": "partitionsOf", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "redeem", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "redeemByPartition", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "redeemFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "documentName", - "type": "bytes32" - } - ], - "name": "removeDocument", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceControl", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceIssuance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "revokeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "revokeOperatorByPartition", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "capTableRegistryAddress", - "type": "address" - } - ], - "name": "setCapTableRegistry", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "operators", - "type": "address[]" - } - ], - "name": "setControllers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "partitions", - "type": "bytes32[]" - } - ], - "name": "setDefaultPartitions", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "documentName", - "type": "bytes32" - }, - { - "internalType": "string", - "name": "uri", - "type": "string" - }, - { - "internalType": "bytes32", - "name": "documentHash", - "type": "bytes32" - } - ], - "name": "setDocument", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - }, - { - "internalType": "address[]", - "name": "operators", - "type": "address[]" - } - ], - "name": "setPartitionControllers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "extension", - "type": "address" - }, - { - "internalType": "string", - "name": "interfaceLabel", - "type": "string" - }, - { - "internalType": "bool", - "name": "removeOldExtensionRoles", - "type": "bool" - }, - { - "internalType": "bool", - "name": "addMinterRoleForExtension", - "type": "bool" - }, - { - "internalType": "bool", - "name": "addControllerRoleForExtension", - "type": "bool" - } - ], - "name": "setTokenExtension", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "partition", - "type": "bytes32[]" - }, - { - "internalType": "address[]", - "name": "from", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "operatorData", - "type": "bytes" - } - ], - "name": "spleis", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "partition", - "type": "bytes32[]" - }, - { - "internalType": "address[]", - "name": "to", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "splitt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalPartitions", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - } - ], - "name": "totalSupplyByPartition", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "partition", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "transferByPartition", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "transferFromWithData", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "transferWithData", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "updateFagsystem", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b5060405162005994380380620059948339810160408190526200003491620009ee565b858585858562000044336200021f565b6200004f336200026f565b62000059620002c1565b50600462000068868262000b51565b50600562000077858262000b51565b50600060075560018310156200008c57600080fd5b60068390556200009c82620002e7565b8051620000b19060149060208401906200072b565b506008805462ffff0019166201010017905560408051808201909152600c81526b22a921989a18182a37b5b2b760a11b6020808301919091526200010191903090620003e4811b6200244417901c565b6200013a6040518060400160405280600a81526020016922a92199182a37b5b2b760b11b81525030620003e460201b620024441760201c565b620001746040518060400160405280600c81526020016b22a921989a18182a37b5b2b760a11b8152506200049260201b620024ee1760201c565b620001ac6040518060400160405280600a81526020016922a92199182a37b5b2b760b11b8152506200049260201b620024ee1760201c565b5050604051339350620001c3925088915062000c1d565b604051908190038120907fbaae3ce00d3ceedebee4e035d2bab26a15d5d5e0c97fa14e2dee257f25b077f690600090a3601c80546001600160a01b0319166001600160a01b03929092169190911790555062000c799350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200028a816002620004e160201b6200253b1790919060201c565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b60004681620002cf62000565565b60009283526003602052604090922082905550919050565b60005b6016548110156200035a576000601760006016848154811062000311576200031162000c3b565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191691151591909117905580620003518162000c51565b915050620002ea565b5060005b8151811015620003ca5760016017600084848151811062000383576200038362000c3b565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580620003c18162000c51565b9150506200035e565b508051620003e09060169060208401906200077b565b5050565b600082604051602001620003f9919062000c1d565b60408051808303601f190181529082905280516020909101206329965a1d60e01b8252306004830152602482018190526001600160a01b03841660448301529150731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b1580156200047457600080fd5b505af115801562000489573d6000803e3d6000fd5b50505050505050565b600180600083604051602001620004aa919062000c1d565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff191691151591909117905550565b620004ed82826200060c565b15620005405760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650060448201526064015b60405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b600046817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6200059462000691565b8051602090910120620005bb6040805180820190915260018152603160f81b602082015290565b80516020918201206040805192830194909452928101919091526060810191909152608081018390523060a082015260c00160408051601f1981840301815291905280516020909101209392505050565b60006001600160a01b038216620006715760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b606482015260840162000537565b506001600160a01b03166000908152602091909152604090205460ff1690565b606060048054620006a29062000ac2565b80601f0160208091040260200160405190810160405280929190818152602001828054620006d09062000ac2565b8015620007215780601f10620006f55761010080835404028352916020019162000721565b820191906000526020600020905b8154815290600101906020018083116200070357829003601f168201915b5050505050905090565b82805482825590600052602060002090810192821562000769579160200282015b82811115620007695782518255916020019190600101906200074c565b5062000777929150620007d3565b5090565b82805482825590600052602060002090810192821562000769579160200282015b828111156200076957825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200079c565b5b80821115620007775760008155600101620007d4565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156200082b576200082b620007ea565b604052919050565b60005b838110156200085057818101518382015260200162000836565b50506000910152565b600082601f8301126200086b57600080fd5b81516001600160401b03811115620008875762000887620007ea565b6200089c601f8201601f191660200162000800565b818152846020838601011115620008b257600080fd5b620008c582602083016020870162000833565b949350505050565b60006001600160401b03821115620008e957620008e9620007ea565b5060051b60200190565b80516001600160a01b03811681146200090b57600080fd5b919050565b600082601f8301126200092257600080fd5b815160206200093b6200093583620008cd565b62000800565b82815260059290921b840181019181810190868411156200095b57600080fd5b8286015b8481101562000981576200097381620008f3565b83529183019183016200095f565b509695505050505050565b600082601f8301126200099e57600080fd5b81516020620009b16200093583620008cd565b82815260059290921b84018101918181019086841115620009d157600080fd5b8286015b84811015620009815780518352918301918301620009d5565b60008060008060008060c0878903121562000a0857600080fd5b86516001600160401b038082111562000a2057600080fd5b62000a2e8a838b0162000859565b9750602089015191508082111562000a4557600080fd5b62000a538a838b0162000859565b965060408901519550606089015191508082111562000a7157600080fd5b62000a7f8a838b0162000910565b9450608089015191508082111562000a9657600080fd5b5062000aa589828a016200098c565b92505062000ab660a08801620008f3565b90509295509295509295565b600181811c9082168062000ad757607f821691505b60208210810362000af857634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000b4c57600081815260208120601f850160051c8101602086101562000b275750805b601f850160051c820191505b8181101562000b485782815560010162000b33565b5050505b505050565b81516001600160401b0381111562000b6d5762000b6d620007ea565b62000b858162000b7e845462000ac2565b8462000afe565b602080601f83116001811462000bbd576000841562000ba45750858301515b600019600386901b1c1916600185901b17855562000b48565b600085815260208120601f198616915b8281101562000bee5788860151825594840194600190910190840162000bcd565b508582101562000c0d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000825162000c3181846020870162000833565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b60006001820162000c7257634e487b7160e01b600052601160045260246000fd5b5060010190565b614d0b8062000c896000396000f3fe608060405234801561001057600080fd5b50600436106103175760003560e01c8063010648ca1461031c57806305494afa1461033157806306fdde0314610344578063095ea7b3146103625780630a4e4f2214610385578063103ef9e11461038d57806314d1e62f146103a0578063168ecec5146103b357806316e1aed4146103c657806317ec83ca146103d957806318160ddd146104255780631d43e1c01461042d57806323b872dd14610435578063249cb3fa146104485780632535f7621461045b57806326ab56501461046e5780632f1cae85146104765780633092afd51461048757806330e828031461049a578063313ce567146104cd5780634c783bf5146104dc57806352ebf263146104ec578063556f0dc7146104ff57806362eb0068146105075780636572974f1461051a57806367c849191461052d57806369598efe146105405780636c30d170146105555780636d77cad61461055d5780636fd00b341461057057806370a0823114610578578063715018a6146105a1578063740ab8f4146105a95780637cc0c3a7146105bc5780638357839e146105d1578063861ed3ea146105e4578063895d7386146103445780638c0dee9c146105f75780638da5cb5b1461060a578063933964c71461061f578063959b8c3f1461063257806395d89b41146105705780639675193c14610645578063983b2d5614610658578063986502751461066b57806398ddcec7146106735780639fa5f50b14610686578063a26734dc1461068e578063a6f4f105146106ae578063a8082cb0146106c1578063a9059cbb146106c9578063aa271e1a146106dc578063b10d6b41146106ef578063b6363cf214610711578063bb3acde914610724578063bb54f8c314610737578063bcfdc0cf1461074a578063c350184814610752578063ca281fd914610765578063dd62ed3e1461076d578063e77c646d146107a6578063e83c43f5146107b9578063ea74838a146107c1578063ec9a6e87146107d4578063ee532f31146107e7578063f2fde38b146107fa578063f3d490db1461080d578063f698da2514610820578063fad8b32a14610828575b600080fd5b61032f61032a366004613df3565b61083b565b005b61032f61033f36600461400a565b610974565b61034c6109f3565b604051610359919061412b565b60405180910390f35b61037561037036600461413e565b610a85565b6040519015158152602001610359565b61032f610b1b565b61032f61039b36600461416a565b610c11565b6103756103ae36600461419a565b610c75565b61032f6103c136600461416a565b610d0d565b61032f6103d4366004614216565b610d6e565b6104176103e7366004614261565b60009283526018602090815260408085206001600160a01b03948516865282528085209290931684525290205490565b604051908152602001610359565b600754610417565b61034c610db8565b6103756104433660046142a3565b610dd3565b61041761045636600461416a565b610ef5565b61032f6104693660046142d3565b610f54565b61034c610f9d565b60085462010000900460ff16610375565b61032f61049536600461432e565b611025565b6104176104a836600461416a565b6001600160a01b03166000908152601360209081526040808320938352929052205490565b60405160128152602001610359565b600854610100900460ff16610375565b61032f6104fa36600461400a565b61105d565b600654610417565b61032f61051536600461434b565b611090565b61032f610528366004614385565b6110e1565b61032f61053b366004614431565b6111b2565b610548611249565b604051610359919061449a565b61032f6112a0565b61037561056b366004614261565b6112b6565b61034c6112cb565b61041761058636600461432e565b6001600160a01b031660009081526009602052604090205490565b61032f6112da565b6105486105b736600461432e565b6112ee565b6105c461135a565b60405161035991906144de565b61032f6105df36600461432e565b6113bb565b6105c46105f236600461451f565b6113e5565b610417610605366004614538565b611450565b6106126115f5565b60405161035991906145df565b61032f61062d366004614608565b611604565b61032f61064036600461432e565b61161a565b61032f6106533660046142d3565b611688565b61032f61066636600461432e565b6117c4565b61032f6117f9565b61032f610681366004614431565b611802565b610548611988565b61041761069c36600461451f565b60009081526010602052604090205490565b61032f6106bc36600461463d565b6119de565b610417611a2b565b6103756106d736600461413e565b611ab8565b6103756106ea36600461432e565b611adf565b6107026106fd36600461451f565b611aec565b604051610359939291906146c3565b61037561071f3660046146e8565b611bcb565b61032f6107323660046142d3565b611bde565b61032f610745366004614385565b611cb5565b610548611d6c565b61032f61076036600461451f565b611dc2565b61032f612098565b61041761077b3660046146e8565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b61032f6107b4366004614716565b6120ad565b6106126120ef565b61032f6107cf366004614754565b612166565b61032f6107e2366004614754565b6121aa565b61032f6107f5366004614795565b6121be565b61032f61080836600461432e565b6122fb565b61041761081b366004614431565b612371565b6104176123cf565b61032f61083636600461432e565b6123d9565b3360009081526017602052604090205460ff1661085757600080fd5b604051806060016040528084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505050602080830185905242604093840152878252600b905220815181906108bf9082614848565b506020820151816001015560408201518160020155905050600c60008281526020019081526020016000205460000361093257600d80546001810182557fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb501829055546000828152600c60205260409020555b837fb4c22d60cd550a815744f04e3ff5278bf19684565ee00e2b084041b6024bd6f684848460405161096693929190614930565b60405180910390a250505050565b60005b84518110156109eb576109d986828151811061099557610995614954565b6020026020010151338784815181106109b0576109b0614954565b60200260200101518785815181106109ca576109ca614954565b602002602001015187876125b7565b806109e381614980565b915050610977565b505050505050565b606060048054610a02906147c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2e906147c8565b8015610a7b5780601f10610a5057610100808354040283529160200191610a7b565b820191906000526020600020905b815481529060010190602001808311610a5e57829003601f168201915b5050505050905090565b60006001600160a01b038316610ab65760405162461bcd60e51b8152600401610aad90614999565b60405180910390fd5b336000818152600a602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b60006016600081548110610b3157610b31614954565b60009182526020822001546040805160018082528183019092526001600160a01b0390921693508160200160208202803683370190505090506000610b746120ef565b90508082600081518110610b8a57610b8a614954565b60200260200101906001600160a01b031690816001600160a01b031681525050610bb382612687565b806001600160a01b0316836001600160a01b0316610bcf6112cb565b604051610bdc91906149b5565b604051908190038120907fddf698a82db69118eb57511894eba2074acdc5cdf75459415afe7386360314a290600090a4505050565b33600081815260196020908152604080832086845282528083206001600160a01b0386168085529252808320805460ff1916600117905551909185917f3646a897c70797ecc134b0adc32f471b07bf1d6f451133b0384badab531e3fd69190a45050565b60006001600160a01b038316610c9d5760405162461bcd60e51b8152600401610aad90614999565b6000848152601860209081526040808320338085529083528184206001600160a01b038816808652908452938290208690559051858152909187917ff061499aa77c2f6f5e25e34955a06623705344a88256cc861a121ec0bce5cfec910160405180910390a45060019392505050565b33600081815260196020908152604080832086845282528083206001600160a01b0386168085529252808320805460ff1916905551909185917f3b287c4f1bab4df949b33bceacef984f544dc5d5479930d00e4ee8c9d8dd96f29190a45050565b610d76612770565b610db3838383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506127cf92505050565b505050565b6040805180820190915260018152603160f81b602082015290565b6000610ddf33856128f2565b80610e0d57506001600160a01b0384166000908152600a602090815260408083203384529091529020548211155b610e295760405162461bcd60e51b8152600401610aad906149d1565b6001600160a01b0384166000908152600a602090815260408083203384529091529020548211610eaa576001600160a01b0384166000908152600a60209081526040808320338452909152902054610e819083612971565b6001600160a01b0385166000908152600a60209081526040808320338452909152902055610ecf565b6001600160a01b0384166000908152600a602090815260408083203384529091528120555b610eeb338585856040518060200160405280600081525061297d565b5060019392505050565b60008281526001602052604081205460ff1615610f4c5760405173455243313832305f4143434550545f4d4147494360601b6020820152603401604051602081830303815290604052805190602001209050610b15565b506000610b15565b610f973333868686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061297d92505050565b50505050565b60606000610fa96120ef565b601c5460405163039dfdcd60e21b81529192506001600160a01b031690630e77f73490610fda9084906004016145df565b600060405180830381865afa158015610ff7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261101f91908101906149ed565b91505090565b61102e33611adf565b8061104857503361103d6115f5565b6001600160a01b0316145b61105157600080fd5b61105a81612ac5565b50565b60005b84518110156109eb5761107e86828151811061099557610995614954565b8061108881614980565b915050611060565b610f978433338686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604080516020810190915290815292506125b7915050565b6110ea33611adf565b806111045750336110f96115f5565b6001600160a01b0316145b61110d57600080fd5b60085462010000900460ff166111355760405162461bcd60e51b8152600401610aad90614a63565b60005b83518110156111ab5761119985828151811061115657611156614954565b60200260200101513386848151811061117157611171614954565b602002602001015186858151811061118b5761118b614954565b602002602001015186612b07565b806111a381614980565b915050611138565b5050505050565b6111bb33611adf565b806111d55750336111ca6115f5565b6001600160a01b0316145b6111de57600080fd5b60085462010000900460ff166112065760405162461bcd60e51b8152600401610aad90614a63565b6111ab8533868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b0792505050565b6060600e805480602002602001604051908101604052809291908181526020018280548015610a7b57602002820191906000526020600020905b815481526020019060010190808311611283575050505050905090565b6112a8612770565b6008805462ff000019169055565b60006112c3848484612bb1565b949350505050565b606060058054610a02906147c8565b6112e2612770565b6112ec6000612c3a565b565b6001600160a01b03811660009081526011602090815260409182902080548351818402810184019094528084526060939283018282801561134e57602002820191906000526020600020905b81548152602001906001019080831161133a575b50505050509050919050565b60606016805480602002602001604051908101604052809291908181526020018280548015610a7b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611394575050505050905090565b6113c3612770565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152601a602090815260409182902080548351818402810184019094528084526060939283018282801561134e57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114275750505050509050919050565b600061145d89338a612bb1565b80611492575060008981526018602090815260408083206001600160a01b038c16845282528083203384529091529020548611155b6114ae5760405162461bcd60e51b8152600401610aad906149d1565b60008981526018602090815260408083206001600160a01b038c168452825280832033845290915290205486116115445760008981526018602090815260408083206001600160a01b038c16845282528083203384529091529020546115149087612971565b60008a81526018602090815260408083206001600160a01b038d1684528252808320338452909152902055611570565b60008981526018602090815260408083206001600160a01b038c16845282528083203384529091528120555b6115e889338a8a8a8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250612c8a92505050565b9998505050505050505050565b6000546001600160a01b031690565b61160c612770565b6116168282612de2565b5050565b336001600160a01b0382160361162f57600080fd5b6001600160a01b0381166000818152601560209081526040808320338085529252808320805460ff19166001179055519092917ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f991a350565b61169233856128f2565b806116c057506001600160a01b0384166000908152600a602090815260408083203384529091529020548311155b6116dc5760405162461bcd60e51b8152600401610aad906149d1565b6001600160a01b0384166000908152600a60209081526040808320338452909152902054831161175d576001600160a01b0384166000908152600a602090815260408083203384529091529020546117349084612971565b6001600160a01b0385166000908152600a60209081526040808320338452909152902055611782565b6001600160a01b0384166000908152600a602090815260408083203384529091528120555b610f9733858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e5392505050565b6117cd33611adf565b806117e75750336117dc6115f5565b6001600160a01b0316145b6117f057600080fd5b61105a81612f90565b6112ec33612ac5565b61180d853386612bb1565b80611842575060008581526018602090815260408083206001600160a01b038816845282528083203384529091529020548311155b6118735760405162461bcd60e51b815260206004820152600260248201526106a760f31b6044820152606401610aad565b60008581526018602090815260408083206001600160a01b0388168452825280832033845290915290205483116119095760008581526018602090815260408083206001600160a01b038816845282528083203384529091529020546118d99084612971565b60008681526018602090815260408083206001600160a01b03891684528252808320338452909152902055611935565b60008581526018602090815260408083206001600160a01b038816845282528083203384529091528120555b6111ab853386866040518060200160405280600081525087878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506125b792505050565b6060600d805480602002602001604051908101604052809291908181526020018280548015610a7b5760200282019190600052602060002090815481526020019060010190808311611283575050505050905090565b6119e6612770565b6109eb8686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250879150869050612fd2565b600046817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611a586109f3565b80519060200120611a67610db8565b80516020918201206040805192830194909452928101919091526060810191909152608081018390523060a082015260c00160408051601f1981840301815291905280516020909101209392505050565b6000611ad6333385856040518060200160405280600081525061297d565b50600192915050565b6000610b1560028361308e565b6000818152600b602052604081208054606092918291611b0b906147c8565b9050600003611b1957600080fd5b6000848152600b602052604090206001810154600282015482548390611b3e906147c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6a906147c8565b8015611bb75780601f10611b8c57610100808354040283529160200191611bb7565b820191906000526020600020905b815481529060010190602001808311611b9a57829003601f168201915b505050505092509250925092509193909250565b6000611bd783836128f2565b9392505050565b611be733611adf565b80611c01575033611bf66115f5565b6001600160a01b0316145b611c0a57600080fd5b60085462010000900460ff16611c325760405162461bcd60e51b8152600401610aad90614a63565b601454600003611c545760405162461bcd60e51b8152600401610aad90614a63565b610f976014600081548110611c6b57611c6b614954565b906000526020600020015433868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b0792505050565b60005b83518110156111ab57600060096000868481518110611cd957611cd9614954565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205403611d455760405162461bcd60e51b81526020600482015260136024820152724e6f206e6577207368617265686f6c6465727360681b6044820152606401610aad565b611d5a85828151811061115657611156614954565b80611d6481614980565b915050611cb8565b60606014805480602002602001604051908101604052809291908181526020018280548015610a7b5760200282019190600052602060002090815481526020019060010190808311611283575050505050905090565b3360009081526017602052604090205460ff16611e105760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610aad565b6000818152600b602052604090208054611e29906147c8565b9050600003611e725760405162461bcd60e51b8152602060048201526015602482015274111bd8dd5b595b9d08191bd95cdb9d08195e1a5cdd605a1b6044820152606401610aad565b6000818152600b6020526040808220815160608101909252805482908290611e99906147c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec5906147c8565b8015611f125780601f10611ee757610100808354040283529160200191611f12565b820191906000526020600020905b815481529060010190602001808311611ef557829003601f168201915b505050505081526020016001820154815260200160028201548152505090506000600c60008360200151815260200190815260200160002054905060008111611f8d5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610aad565b600d805460009190611fa190600190614a7f565b81548110611fb157611fb1614954565b9060005260206000200154905080600d600184611fce9190614a7f565b81548110611fde57611fde614954565b6000918252602080832090910192909255828152600c90915260409020829055600d80548061200f5761200f614a92565b600082815260208082208301600019908101839055909201909255848101518252600c81526040808320839055868352600b9091528120906120518282613cbc565b506000600182018190556002909101558251602084015160405186927f3d9bba27d3e360d8c80645beed7e991454a8271bf6f269a24f7782be0f0d06549261096692614aa8565b6120a0612770565b6008805461ff0019169055565b610db333338585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e5392505050565b601c546040516359fa131b60e01b81526000916001600160a01b0316906359fa131b906121209030906004016145df565b602060405180830381865afa15801561213d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121619190614aca565b905090565b61216e612770565b61161682828080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061268792505050565b6121b2612770565b610db360148383613cf6565b6121c833866128f2565b806121f657506001600160a01b0385166000908152600a602090815260408083203384529091529020548311155b6122125760405162461bcd60e51b8152600401610aad906149d1565b6001600160a01b0385166000908152600a602090815260408083203384529091529020548311612293576001600160a01b0385166000908152600a6020908152604080832033845290915290205461226a9084612971565b6001600160a01b0386166000908152600a602090815260408083203384529091529020556122b8565b6001600160a01b0385166000908152600a602090815260408083203384529091528120555b6111ab3386868686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061297d92505050565b612303612770565b6001600160a01b0381166123685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aad565b61105a81612c3a565b60006123c5863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250612c8a915050565b9695505050505050565b6000612161613111565b336001600160a01b038216036123ee57600080fd5b6001600160a01b0381166000818152601560209081526040808320338085529252808320805460ff19169055519092917f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa191a350565b60008260405160200161245791906149b5565b60408051808303601f190181529082905280516020909101206329965a1d60e01b8252306004830152602482018190526001600160a01b03841660448301529150731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b1580156124d157600080fd5b505af11580156124e5573d6000803e3d6000fd5b50505050505050565b60018060008360405160200161250491906149b5565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff191691151591909117905550565b612545828261308e565b156125925760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006044820152606401610aad565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6001600160a01b03841660009081526013602090815260408083208984529091529020548311156125fa5760405162461bcd60e51b8152600401610aad90614ae7565b61260a8686866000878787613134565b61261a86868660008787876131f6565b61262584878561327e565b61263185858585613540565b836001600160a01b0316856001600160a01b0316877fce306c3dbc4a497124b5a4f2be8388b41084c1d74663da27ecee1186c00239bf8685604051612677929190614b03565b60405180910390a4505050505050565b60005b6016548110156126f357600060176000601684815481106126ad576126ad614954565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055806126eb81614980565b91505061268a565b5060005b815181101561275c5760016017600084848151811061271857612718614954565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061275481614980565b9150506126f7565b508051611616906016906020840190613d41565b336127796115f5565b6001600160a01b0316146112ec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aad565b60005b6000838152601a602052604090205481101561285b576000838152601b60209081526040808320601a909252822080548391908590811061281557612815614954565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790558061285381614980565b9150506127d2565b5060005b81518110156128d2576000838152601b6020526040812083516001929085908590811061288e5761288e614954565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806128ca81614980565b91505061285f565b506000828152601a602090815260409091208251610db392840190613d41565b6000816001600160a01b0316836001600160a01b0316148061293957506001600160a01b0380841660009081526015602090815260408083209386168352929052205460ff165b80611bd75750600854610100900460ff168015611bd7575050506001600160a01b031660009081526017602052604090205460ff1690565b6000611bd78284614a7f565b60145460000361299f5760405162461bcd60e51b8152600401610aad90614a63565b816000805b601454811015612aa6576001600160a01b038716600090815260136020526040812060148054919291849081106129dd576129dd614954565b90600052602060002001548152602001908152602001600020549150818311612a4557612a3b60148281548110612a1657612a16614954565b9060005260206000200154898989878960405180602001604052806000815250612c8a565b5060009250612aa6565b8115612a9457612a8660148281548110612a6157612a61614954565b9060005260206000200154898989868960405180602001604052806000815250612c8a565b50612a918284614a7f565b92505b80612a9e81614980565b9150506129a4565b5081156124e55760405162461bcd60e51b8152600401610aad90614ae7565b612ad06002826136b8565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b612b2685856000868686604051806020016040528060008152506131f6565b612b328484848461373a565b612b3d838684613863565b612b5c85856000868686604051806020016040528060008152506139a7565b826001600160a01b0316846001600160a01b0316867ff0ded82afbb1bb3ff3fc48cb2a26584aa84e4af0bf309c804ecdb94d0f6a98bb8585604051612ba2929190614b1c565b60405180910390a45050505050565b6000612bbd83836128f2565b80612bf557506001600160a01b03808316600090815260196020908152604080832088845282528083209387168352929052205460ff165b806112c35750600854610100900460ff1680156112c3575050506000918252601b602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03851660009081526013602090815260408083208a8452909152812054841115612ccd5760405162461bcd60e51b8152600401610aad90614ae7565b8151889015801590612ce157506040845110155b15612cf357612cf08985613a2f565b90505b612d0289898989898989613134565b612d11898989898989896131f6565b612d1c878a8761327e565b612d27878787613a5b565b612d32868287613863565b612d41818989898989896139a7565b856001600160a01b0316876001600160a01b03168a7fff4e9a26af4eb73b8bacfaa4abd4fea03d9448e7b912dc5ff4019048875aa2d48b898989604051612d8b9493929190614b4f565b60405180910390a4888114612dd65780897f67c8ba31d2dd11f1384577b3405b04ed91eed1231e408432ad2458cab37b2fa187604051612dcd91815260200190565b60405180910390a35b98975050505050505050565b612e0e6040518060400160405280600a81526020016922a92199182a37b5b2b760b11b81525083612444565b612e3c6040518060400160405280600c81526020016b22a921989a18182a37b5b2b760a11b81525083612444565b8015611616576008805460ff191660011790555050565b601454600003612e755760405162461bcd60e51b8152600401610aad90614a63565b816000805b601454811015612f71576001600160a01b03861660009081526013602052604081206014805491929184908110612eb357612eb3614954565b90600052602060002001548152602001908152602001600020549150818311612f1957612f1060148281548110612eec57612eec614954565b906000526020600020015488888688604051806020016040528060008152506125b7565b60009250612f71565b612f5360148281548110612f2f57612f2f614954565b906000526020600020015488888588604051806020016040528060008152506125b7565b612f5d8284614a7f565b925080612f6981614980565b915050612e7a565b5081156109eb5760405162461bcd60e51b8152600401610aad90614ae7565b612f9b60028261253b565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6000612fde3086613ba2565b90506001600160a01b03811615801590612ff55750835b156130325761300381611adf565b156130115761301181612ac5565b6001600160a01b0381166000908152601760205260409020805460ff191690555b61303c8587612444565b82801561304f575061304d86611adf565b155b1561305d5761305d86612f90565b81156109eb576001600160a01b0386166000908152601760205260409020805460ff19166001179055505050505050565b60006001600160a01b0382166130f15760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b6064820152608401610aad565b506001600160a01b03166000908152602091909152604090205460ff1690565b46600090815260036020526040812054801561312c57919050565b61101f613c51565b600061316b866040518060400160405280601381526020017222a921989a18182a37b5b2b739a9b2b73232b960691b815250613ba2565b90506001600160a01b038116156131ec5760405163139d569560e21b81526001600160a01b03821690634e755a54906131b99060009036908d908d908d908d908d908d908d90600401614b93565b600060405180830381600087803b1580156131d357600080fd5b505af11580156131e7573d6000803e3d6000fd5b505050505b5050505050505050565b6000613230306040518060400160405280601681526020017522a921989a18182a37b5b2b739ab30b634b230ba37b960511b815250613ba2565b90506001600160a01b038116156131ec57604051632907d53b60e11b81526001600160a01b0382169063520faa76906131b99060009036908d908d908d908d908d908d908d90600401614b93565b6001600160a01b03831660009081526013602090815260408083208584529091529020546132ac9082612971565b6001600160a01b03841660009081526013602090815260408083208684528252808320939093556010905220546132e39082612971565b6000838152601060205260408120829055036133d1576000828152600f6020526040902054806133255760405162461bcd60e51b8152600401610aad90614c0d565b600e80546000919061333990600190614a7f565b8154811061334957613349614954565b9060005260206000200154905080600e6001846133669190614a7f565b8154811061337657613376614954565b6000918252602080832090910192909255828152600f90915260409020829055600e8054806133a7576133a7614a92565b600082815260208082208301600019908101839055909201909255858252600f9052604081205550505b6001600160a01b03831660009081526013602090815260408083208584529091528120549003610db3576001600160a01b03831660009081526012602090815260408083208584529091529020548061343c5760405162461bcd60e51b8152600401610aad90614c0d565b6001600160a01b0384166000908152601160205260408120805461346290600190614a7f565b8154811061347257613472614954565b60009182526020808320909101546001600160a01b03881683526011909152604090912090915081906134a6600185614a7f565b815481106134b6576134b6614954565b60009182526020808320909101929092556001600160a01b038716808252601283526040808320858452845280832086905590825260119092522080548061350057613500614a92565b6000828152602080822083016000199081018390559092019092556001600160a01b03871682526012815260408083208784529091528120555050505050565b60085460ff16156135635760405162461bcd60e51b8152600401610aad90614c29565b61356c82613c75565b6135885760405162461bcd60e51b8152600401610aad90614c0d565b6001600160a01b0383166135ae5760405162461bcd60e51b8152600401610aad90614999565b6001600160a01b0383166000908152600960205260409020548211156135e65760405162461bcd60e51b8152600401610aad90614ae7565b6001600160a01b0383166000908152600960205260409020546136099083612971565b6001600160a01b03841660009081526009602052604090205560075461362f9083612971565b600781905550826001600160a01b0316846001600160a01b03167fb7d0d6b60740753e9f16692a2f479472a1385aec2420fa43225b02f2ffa1afe7848460405161367a929190614b03565b60405180910390a36040518281526000906001600160a01b03851690600080516020614cb6833981519152906020015b60405180910390a350505050565b6136c2828261308e565b6137185760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b6064820152608401610aad565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b60085460ff161561375d5760405162461bcd60e51b8152600401610aad90614c29565b61376682613c75565b6137825760405162461bcd60e51b8152600401610aad90614c0d565b6001600160a01b0383166137a85760405162461bcd60e51b8152600401610aad90614c45565b6007546137b59083613c98565b6007556001600160a01b0383166000908152600960205260409020546137db9083613c98565b6001600160a01b0380851660008181526009602052604090819020939093559151908616907f0e9905d62635f049c2f4e11678ebf9dc3d1f8c4a653e290759b772e47ba00d009061382f9086908690614b03565b60405180910390a36040518281526001600160a01b03841690600090600080516020614cb6833981519152906020016136aa565b8015610db3576001600160a01b038316600090815260126020908152604080832085845290915281205490036138d7576001600160a01b0383166000818152601160209081526040808320805460018101825581855283852001879055938352925460128252838320868452909152919020555b6001600160a01b03831660009081526013602090815260408083208584529091529020546139059082613c98565b6001600160a01b0384166000908152601360209081526040808320868452825280832093909355600f905290812054900361397a57600e80546001810182557fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd01839055546000838152600f60205260409020555b6000828152601060205260409020546139939082613c98565b600083815260106020526040902055505050565b60006139e18560405180604001604052806016815260200175115490cc4d0c0c151bdad95b9cd49958da5c1a595b9d60521b815250613ba2565b90506001600160a01b038116156131ec57604051637a325abb60e11b81526001600160a01b0382169063f464b576906131b99060009036908d908d908d908d908d908d908d90600401614b93565b60208101516000906000199060018101613a4f5760408401519250613a53565b8492505b505092915050565b60085460ff1615613a7e5760405162461bcd60e51b8152600401610aad90614c29565b613a8781613c75565b613aa35760405162461bcd60e51b8152600401610aad90614c0d565b6001600160a01b038216613ac95760405162461bcd60e51b8152600401610aad90614c45565b6001600160a01b038316600090815260096020526040902054811115613b015760405162461bcd60e51b8152600401610aad90614ae7565b6001600160a01b038316600090815260096020526040902054613b249082612971565b6001600160a01b038085166000908152600960205260408082209390935590841681522054613b539082613c98565b6001600160a01b038084166000818152600960205260409081902093909355915190851690600080516020614cb683398151915290613b959085815260200190565b60405180910390a3505050565b60008082604051602001613bb691906149b5565b60408051808303601f1901815290829052805160209091012063555ddc6560e11b82526001600160a01b0386166004830152602482018190529150731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015613c2d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c39190614aca565b60004681613c5d611a2b565b60009283526003602052604090922082905550919050565b6006546000908290613c9190613c8b8382613ca4565b90613cb0565b1492915050565b6000611bd78284614c61565b6000611bd78284614c74565b6000611bd78284614c96565b508054613cc8906147c8565b6000825580601f10613cd8575050565b601f01602090049060005260206000209081019061105a9190613d96565b828054828255906000526020600020908101928215613d31579160200282015b82811115613d31578235825591602001919060010190613d16565b50613d3d929150613d96565b5090565b828054828255906000526020600020908101928215613d31579160200282015b82811115613d3157825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613d61565b5b80821115613d3d5760008155600101613d97565b60008083601f840112613dbd57600080fd5b5081356001600160401b03811115613dd457600080fd5b602083019150836020828501011115613dec57600080fd5b9250929050565b60008060008060608587031215613e0957600080fd5b8435935060208501356001600160401b03811115613e2657600080fd5b613e3287828801613dab565b9598909750949560400135949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613e8357613e83613e45565b604052919050565b60006001600160401b03821115613ea457613ea4613e45565b5060051b60200190565b600082601f830112613ebf57600080fd5b81356020613ed4613ecf83613e8b565b613e5b565b82815260059290921b84018101918181019086841115613ef357600080fd5b8286015b84811015613f0e5780358352918301918301613ef7565b509695505050505050565b6001600160a01b038116811461105a57600080fd5b600082601f830112613f3f57600080fd5b81356020613f4f613ecf83613e8b565b82815260059290921b84018101918181019086841115613f6e57600080fd5b8286015b84811015613f0e578035613f8581613f19565b8352918301918301613f72565b60006001600160401b03821115613fab57613fab613e45565b50601f01601f191660200190565b600082601f830112613fca57600080fd5b8135613fd8613ecf82613f92565b818152846020838601011115613fed57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561402257600080fd5b85356001600160401b038082111561403957600080fd5b61404589838a01613eae565b9650602088013591508082111561405b57600080fd5b61406789838a01613f2e565b9550604088013591508082111561407d57600080fd5b61408989838a01613eae565b9450606088013591508082111561409f57600080fd5b6140ab89838a01613fb9565b935060808801359150808211156140c157600080fd5b506140ce88828901613fb9565b9150509295509295909350565b60005b838110156140f65781810151838201526020016140de565b50506000910152565b600081518084526141178160208601602086016140db565b601f01601f19169290920160200192915050565b602081526000611bd760208301846140ff565b6000806040838503121561415157600080fd5b823561415c81613f19565b946020939093013593505050565b6000806040838503121561417d57600080fd5b82359150602083013561418f81613f19565b809150509250929050565b6000806000606084860312156141af57600080fd5b8335925060208401356141c181613f19565b929592945050506040919091013590565b60008083601f8401126141e457600080fd5b5081356001600160401b038111156141fb57600080fd5b6020830191508360208260051b8501011115613dec57600080fd5b60008060006040848603121561422b57600080fd5b8335925060208401356001600160401b0381111561424857600080fd5b614254868287016141d2565b9497909650939450505050565b60008060006060848603121561427657600080fd5b83359250602084013561428881613f19565b9150604084013561429881613f19565b809150509250925092565b6000806000606084860312156142b857600080fd5b83356142c381613f19565b925060208401356141c181613f19565b600080600080606085870312156142e957600080fd5b84356142f481613f19565b93506020850135925060408501356001600160401b0381111561431657600080fd5b61432287828801613dab565b95989497509550505050565b60006020828403121561434057600080fd5b8135611bd781613f19565b6000806000806060858703121561436157600080fd5b843593506020850135925060408501356001600160401b0381111561431657600080fd5b6000806000806080858703121561439b57600080fd5b84356001600160401b03808211156143b257600080fd5b6143be88838901613eae565b955060208701359150808211156143d457600080fd5b6143e088838901613f2e565b945060408701359150808211156143f657600080fd5b61440288838901613eae565b9350606087013591508082111561441857600080fd5b5061442587828801613fb9565b91505092959194509250565b60008060008060006080868803121561444957600080fd5b85359450602086013561445b81613f19565b93506040860135925060608601356001600160401b0381111561447d57600080fd5b61448988828901613dab565b969995985093965092949392505050565b6020808252825182820181905260009190848201906040850190845b818110156144d2578351835292840192918401916001016144b6565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156144d25783516001600160a01b0316835292840192918401916001016144fa565b60006020828403121561453157600080fd5b5035919050565b60008060008060008060008060c0898b03121561455457600080fd5b88359750602089013561456681613f19565b9650604089013561457681613f19565b95506060890135945060808901356001600160401b038082111561459957600080fd5b6145a58c838d01613dab565b909650945060a08b01359150808211156145be57600080fd5b506145cb8b828c01613dab565b999c989b5096995094979396929594505050565b6001600160a01b0391909116815260200190565b8035801515811461460357600080fd5b919050565b6000806040838503121561461b57600080fd5b823561462681613f19565b9150614634602084016145f3565b90509250929050565b60008060008060008060a0878903121561465657600080fd5b863561466181613f19565b955060208701356001600160401b0381111561467c57600080fd5b61468889828a01613dab565b909650945061469b9050604088016145f3565b92506146a9606088016145f3565b91506146b7608088016145f3565b90509295509295509295565b6060815260006146d660608301866140ff565b60208301949094525060400152919050565b600080604083850312156146fb57600080fd5b823561470681613f19565b9150602083013561418f81613f19565b60008060006040848603121561472b57600080fd5b8335925060208401356001600160401b0381111561474857600080fd5b61425486828701613dab565b6000806020838503121561476757600080fd5b82356001600160401b0381111561477d57600080fd5b614789858286016141d2565b90969095509350505050565b6000806000806000608086880312156147ad57600080fd5b85356147b881613f19565b9450602086013561445b81613f19565b600181811c908216806147dc57607f821691505b6020821081036147fc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610db357600081815260208120601f850160051c810160208610156148295750805b601f850160051c820191505b818110156109eb57828155600101614835565b81516001600160401b0381111561486157614861613e45565b6148758161486f84546147c8565b84614802565b602080601f8311600181146148aa57600084156148925750858301515b600019600386901b1c1916600185901b1785556109eb565b600085815260208120601f198616915b828110156148d9578886015182559484019460019091019084016148ba565b50858210156148f75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000614944604083018587614907565b9050826020830152949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016149925761499261496a565b5060010190565b6020808252600290820152611a9b60f11b604082015260600190565b600082516149c78184602087016140db565b9190910192915050565b602080825260029082015261353360f01b604082015260600190565b6000602082840312156149ff57600080fd5b81516001600160401b03811115614a1557600080fd5b8201601f81018413614a2657600080fd5b8051614a34613ecf82613f92565b818152856020838501011115614a4957600080fd5b614a5a8260208301602086016140db565b95945050505050565b602080825260029082015261353560f01b604082015260600190565b81810381811115610b1557610b1561496a565b634e487b7160e01b600052603160045260246000fd5b604081526000614abb60408301856140ff565b90508260208301529392505050565b600060208284031215614adc57600080fd5b8151611bd781613f19565b6020808252600290820152611a9960f11b604082015260600190565b8281526040602082015260006112c360408301846140ff565b828152606060208201526000614b3560608301846140ff565b828103604084015260008152602081019150509392505050565b60018060a01b0385168152836020820152608060408201526000614b7660808301856140ff565b8281036060840152614b8881856140ff565b979650505050505050565b6000610100808352614ba88184018c8e614907565b602084018b90526001600160a01b038a8116604086015289811660608601528816608085015260a0840187905283810360c08501529050614be981866140ff565b905082810360e0840152614bfd81856140ff565b9c9b505050505050505050505050565b602080825260029082015261035360f41b604082015260600190565b6020808252600290820152610d4d60f21b604082015260600190565b602080825260029082015261353760f01b604082015260600190565b80820180821115610b1557610b1561496a565b600082614c9157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614cb057614cb061496a565b50029056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212205cf5517dca73d781329c4527ec52d9a9d1ff50b2ff7a28ca63e5ac9dff20a17d64736f6c63430008100033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103175760003560e01c8063010648ca1461031c57806305494afa1461033157806306fdde0314610344578063095ea7b3146103625780630a4e4f2214610385578063103ef9e11461038d57806314d1e62f146103a0578063168ecec5146103b357806316e1aed4146103c657806317ec83ca146103d957806318160ddd146104255780631d43e1c01461042d57806323b872dd14610435578063249cb3fa146104485780632535f7621461045b57806326ab56501461046e5780632f1cae85146104765780633092afd51461048757806330e828031461049a578063313ce567146104cd5780634c783bf5146104dc57806352ebf263146104ec578063556f0dc7146104ff57806362eb0068146105075780636572974f1461051a57806367c849191461052d57806369598efe146105405780636c30d170146105555780636d77cad61461055d5780636fd00b341461057057806370a0823114610578578063715018a6146105a1578063740ab8f4146105a95780637cc0c3a7146105bc5780638357839e146105d1578063861ed3ea146105e4578063895d7386146103445780638c0dee9c146105f75780638da5cb5b1461060a578063933964c71461061f578063959b8c3f1461063257806395d89b41146105705780639675193c14610645578063983b2d5614610658578063986502751461066b57806398ddcec7146106735780639fa5f50b14610686578063a26734dc1461068e578063a6f4f105146106ae578063a8082cb0146106c1578063a9059cbb146106c9578063aa271e1a146106dc578063b10d6b41146106ef578063b6363cf214610711578063bb3acde914610724578063bb54f8c314610737578063bcfdc0cf1461074a578063c350184814610752578063ca281fd914610765578063dd62ed3e1461076d578063e77c646d146107a6578063e83c43f5146107b9578063ea74838a146107c1578063ec9a6e87146107d4578063ee532f31146107e7578063f2fde38b146107fa578063f3d490db1461080d578063f698da2514610820578063fad8b32a14610828575b600080fd5b61032f61032a366004613df3565b61083b565b005b61032f61033f36600461400a565b610974565b61034c6109f3565b604051610359919061412b565b60405180910390f35b61037561037036600461413e565b610a85565b6040519015158152602001610359565b61032f610b1b565b61032f61039b36600461416a565b610c11565b6103756103ae36600461419a565b610c75565b61032f6103c136600461416a565b610d0d565b61032f6103d4366004614216565b610d6e565b6104176103e7366004614261565b60009283526018602090815260408085206001600160a01b03948516865282528085209290931684525290205490565b604051908152602001610359565b600754610417565b61034c610db8565b6103756104433660046142a3565b610dd3565b61041761045636600461416a565b610ef5565b61032f6104693660046142d3565b610f54565b61034c610f9d565b60085462010000900460ff16610375565b61032f61049536600461432e565b611025565b6104176104a836600461416a565b6001600160a01b03166000908152601360209081526040808320938352929052205490565b60405160128152602001610359565b600854610100900460ff16610375565b61032f6104fa36600461400a565b61105d565b600654610417565b61032f61051536600461434b565b611090565b61032f610528366004614385565b6110e1565b61032f61053b366004614431565b6111b2565b610548611249565b604051610359919061449a565b61032f6112a0565b61037561056b366004614261565b6112b6565b61034c6112cb565b61041761058636600461432e565b6001600160a01b031660009081526009602052604090205490565b61032f6112da565b6105486105b736600461432e565b6112ee565b6105c461135a565b60405161035991906144de565b61032f6105df36600461432e565b6113bb565b6105c46105f236600461451f565b6113e5565b610417610605366004614538565b611450565b6106126115f5565b60405161035991906145df565b61032f61062d366004614608565b611604565b61032f61064036600461432e565b61161a565b61032f6106533660046142d3565b611688565b61032f61066636600461432e565b6117c4565b61032f6117f9565b61032f610681366004614431565b611802565b610548611988565b61041761069c36600461451f565b60009081526010602052604090205490565b61032f6106bc36600461463d565b6119de565b610417611a2b565b6103756106d736600461413e565b611ab8565b6103756106ea36600461432e565b611adf565b6107026106fd36600461451f565b611aec565b604051610359939291906146c3565b61037561071f3660046146e8565b611bcb565b61032f6107323660046142d3565b611bde565b61032f610745366004614385565b611cb5565b610548611d6c565b61032f61076036600461451f565b611dc2565b61032f612098565b61041761077b3660046146e8565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b61032f6107b4366004614716565b6120ad565b6106126120ef565b61032f6107cf366004614754565b612166565b61032f6107e2366004614754565b6121aa565b61032f6107f5366004614795565b6121be565b61032f61080836600461432e565b6122fb565b61041761081b366004614431565b612371565b6104176123cf565b61032f61083636600461432e565b6123d9565b3360009081526017602052604090205460ff1661085757600080fd5b604051806060016040528084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505050602080830185905242604093840152878252600b905220815181906108bf9082614848565b506020820151816001015560408201518160020155905050600c60008281526020019081526020016000205460000361093257600d80546001810182557fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb501829055546000828152600c60205260409020555b837fb4c22d60cd550a815744f04e3ff5278bf19684565ee00e2b084041b6024bd6f684848460405161096693929190614930565b60405180910390a250505050565b60005b84518110156109eb576109d986828151811061099557610995614954565b6020026020010151338784815181106109b0576109b0614954565b60200260200101518785815181106109ca576109ca614954565b602002602001015187876125b7565b806109e381614980565b915050610977565b505050505050565b606060048054610a02906147c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2e906147c8565b8015610a7b5780601f10610a5057610100808354040283529160200191610a7b565b820191906000526020600020905b815481529060010190602001808311610a5e57829003601f168201915b5050505050905090565b60006001600160a01b038316610ab65760405162461bcd60e51b8152600401610aad90614999565b60405180910390fd5b336000818152600a602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b60006016600081548110610b3157610b31614954565b60009182526020822001546040805160018082528183019092526001600160a01b0390921693508160200160208202803683370190505090506000610b746120ef565b90508082600081518110610b8a57610b8a614954565b60200260200101906001600160a01b031690816001600160a01b031681525050610bb382612687565b806001600160a01b0316836001600160a01b0316610bcf6112cb565b604051610bdc91906149b5565b604051908190038120907fddf698a82db69118eb57511894eba2074acdc5cdf75459415afe7386360314a290600090a4505050565b33600081815260196020908152604080832086845282528083206001600160a01b0386168085529252808320805460ff1916600117905551909185917f3646a897c70797ecc134b0adc32f471b07bf1d6f451133b0384badab531e3fd69190a45050565b60006001600160a01b038316610c9d5760405162461bcd60e51b8152600401610aad90614999565b6000848152601860209081526040808320338085529083528184206001600160a01b038816808652908452938290208690559051858152909187917ff061499aa77c2f6f5e25e34955a06623705344a88256cc861a121ec0bce5cfec910160405180910390a45060019392505050565b33600081815260196020908152604080832086845282528083206001600160a01b0386168085529252808320805460ff1916905551909185917f3b287c4f1bab4df949b33bceacef984f544dc5d5479930d00e4ee8c9d8dd96f29190a45050565b610d76612770565b610db3838383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506127cf92505050565b505050565b6040805180820190915260018152603160f81b602082015290565b6000610ddf33856128f2565b80610e0d57506001600160a01b0384166000908152600a602090815260408083203384529091529020548211155b610e295760405162461bcd60e51b8152600401610aad906149d1565b6001600160a01b0384166000908152600a602090815260408083203384529091529020548211610eaa576001600160a01b0384166000908152600a60209081526040808320338452909152902054610e819083612971565b6001600160a01b0385166000908152600a60209081526040808320338452909152902055610ecf565b6001600160a01b0384166000908152600a602090815260408083203384529091528120555b610eeb338585856040518060200160405280600081525061297d565b5060019392505050565b60008281526001602052604081205460ff1615610f4c5760405173455243313832305f4143434550545f4d4147494360601b6020820152603401604051602081830303815290604052805190602001209050610b15565b506000610b15565b610f973333868686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061297d92505050565b50505050565b60606000610fa96120ef565b601c5460405163039dfdcd60e21b81529192506001600160a01b031690630e77f73490610fda9084906004016145df565b600060405180830381865afa158015610ff7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261101f91908101906149ed565b91505090565b61102e33611adf565b8061104857503361103d6115f5565b6001600160a01b0316145b61105157600080fd5b61105a81612ac5565b50565b60005b84518110156109eb5761107e86828151811061099557610995614954565b8061108881614980565b915050611060565b610f978433338686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604080516020810190915290815292506125b7915050565b6110ea33611adf565b806111045750336110f96115f5565b6001600160a01b0316145b61110d57600080fd5b60085462010000900460ff166111355760405162461bcd60e51b8152600401610aad90614a63565b60005b83518110156111ab5761119985828151811061115657611156614954565b60200260200101513386848151811061117157611171614954565b602002602001015186858151811061118b5761118b614954565b602002602001015186612b07565b806111a381614980565b915050611138565b5050505050565b6111bb33611adf565b806111d55750336111ca6115f5565b6001600160a01b0316145b6111de57600080fd5b60085462010000900460ff166112065760405162461bcd60e51b8152600401610aad90614a63565b6111ab8533868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b0792505050565b6060600e805480602002602001604051908101604052809291908181526020018280548015610a7b57602002820191906000526020600020905b815481526020019060010190808311611283575050505050905090565b6112a8612770565b6008805462ff000019169055565b60006112c3848484612bb1565b949350505050565b606060058054610a02906147c8565b6112e2612770565b6112ec6000612c3a565b565b6001600160a01b03811660009081526011602090815260409182902080548351818402810184019094528084526060939283018282801561134e57602002820191906000526020600020905b81548152602001906001019080831161133a575b50505050509050919050565b60606016805480602002602001604051908101604052809291908181526020018280548015610a7b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611394575050505050905090565b6113c3612770565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152601a602090815260409182902080548351818402810184019094528084526060939283018282801561134e57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114275750505050509050919050565b600061145d89338a612bb1565b80611492575060008981526018602090815260408083206001600160a01b038c16845282528083203384529091529020548611155b6114ae5760405162461bcd60e51b8152600401610aad906149d1565b60008981526018602090815260408083206001600160a01b038c168452825280832033845290915290205486116115445760008981526018602090815260408083206001600160a01b038c16845282528083203384529091529020546115149087612971565b60008a81526018602090815260408083206001600160a01b038d1684528252808320338452909152902055611570565b60008981526018602090815260408083206001600160a01b038c16845282528083203384529091528120555b6115e889338a8a8a8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250612c8a92505050565b9998505050505050505050565b6000546001600160a01b031690565b61160c612770565b6116168282612de2565b5050565b336001600160a01b0382160361162f57600080fd5b6001600160a01b0381166000818152601560209081526040808320338085529252808320805460ff19166001179055519092917ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f991a350565b61169233856128f2565b806116c057506001600160a01b0384166000908152600a602090815260408083203384529091529020548311155b6116dc5760405162461bcd60e51b8152600401610aad906149d1565b6001600160a01b0384166000908152600a60209081526040808320338452909152902054831161175d576001600160a01b0384166000908152600a602090815260408083203384529091529020546117349084612971565b6001600160a01b0385166000908152600a60209081526040808320338452909152902055611782565b6001600160a01b0384166000908152600a602090815260408083203384529091528120555b610f9733858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e5392505050565b6117cd33611adf565b806117e75750336117dc6115f5565b6001600160a01b0316145b6117f057600080fd5b61105a81612f90565b6112ec33612ac5565b61180d853386612bb1565b80611842575060008581526018602090815260408083206001600160a01b038816845282528083203384529091529020548311155b6118735760405162461bcd60e51b815260206004820152600260248201526106a760f31b6044820152606401610aad565b60008581526018602090815260408083206001600160a01b0388168452825280832033845290915290205483116119095760008581526018602090815260408083206001600160a01b038816845282528083203384529091529020546118d99084612971565b60008681526018602090815260408083206001600160a01b03891684528252808320338452909152902055611935565b60008581526018602090815260408083206001600160a01b038816845282528083203384529091528120555b6111ab853386866040518060200160405280600081525087878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506125b792505050565b6060600d805480602002602001604051908101604052809291908181526020018280548015610a7b5760200282019190600052602060002090815481526020019060010190808311611283575050505050905090565b6119e6612770565b6109eb8686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250879150869050612fd2565b600046817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611a586109f3565b80519060200120611a67610db8565b80516020918201206040805192830194909452928101919091526060810191909152608081018390523060a082015260c00160408051601f1981840301815291905280516020909101209392505050565b6000611ad6333385856040518060200160405280600081525061297d565b50600192915050565b6000610b1560028361308e565b6000818152600b602052604081208054606092918291611b0b906147c8565b9050600003611b1957600080fd5b6000848152600b602052604090206001810154600282015482548390611b3e906147c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6a906147c8565b8015611bb75780601f10611b8c57610100808354040283529160200191611bb7565b820191906000526020600020905b815481529060010190602001808311611b9a57829003601f168201915b505050505092509250925092509193909250565b6000611bd783836128f2565b9392505050565b611be733611adf565b80611c01575033611bf66115f5565b6001600160a01b0316145b611c0a57600080fd5b60085462010000900460ff16611c325760405162461bcd60e51b8152600401610aad90614a63565b601454600003611c545760405162461bcd60e51b8152600401610aad90614a63565b610f976014600081548110611c6b57611c6b614954565b906000526020600020015433868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b0792505050565b60005b83518110156111ab57600060096000868481518110611cd957611cd9614954565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205403611d455760405162461bcd60e51b81526020600482015260136024820152724e6f206e6577207368617265686f6c6465727360681b6044820152606401610aad565b611d5a85828151811061115657611156614954565b80611d6481614980565b915050611cb8565b60606014805480602002602001604051908101604052809291908181526020018280548015610a7b5760200282019190600052602060002090815481526020019060010190808311611283575050505050905090565b3360009081526017602052604090205460ff16611e105760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610aad565b6000818152600b602052604090208054611e29906147c8565b9050600003611e725760405162461bcd60e51b8152602060048201526015602482015274111bd8dd5b595b9d08191bd95cdb9d08195e1a5cdd605a1b6044820152606401610aad565b6000818152600b6020526040808220815160608101909252805482908290611e99906147c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec5906147c8565b8015611f125780601f10611ee757610100808354040283529160200191611f12565b820191906000526020600020905b815481529060010190602001808311611ef557829003601f168201915b505050505081526020016001820154815260200160028201548152505090506000600c60008360200151815260200190815260200160002054905060008111611f8d5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610aad565b600d805460009190611fa190600190614a7f565b81548110611fb157611fb1614954565b9060005260206000200154905080600d600184611fce9190614a7f565b81548110611fde57611fde614954565b6000918252602080832090910192909255828152600c90915260409020829055600d80548061200f5761200f614a92565b600082815260208082208301600019908101839055909201909255848101518252600c81526040808320839055868352600b9091528120906120518282613cbc565b506000600182018190556002909101558251602084015160405186927f3d9bba27d3e360d8c80645beed7e991454a8271bf6f269a24f7782be0f0d06549261096692614aa8565b6120a0612770565b6008805461ff0019169055565b610db333338585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e5392505050565b601c546040516359fa131b60e01b81526000916001600160a01b0316906359fa131b906121209030906004016145df565b602060405180830381865afa15801561213d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121619190614aca565b905090565b61216e612770565b61161682828080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061268792505050565b6121b2612770565b610db360148383613cf6565b6121c833866128f2565b806121f657506001600160a01b0385166000908152600a602090815260408083203384529091529020548311155b6122125760405162461bcd60e51b8152600401610aad906149d1565b6001600160a01b0385166000908152600a602090815260408083203384529091529020548311612293576001600160a01b0385166000908152600a6020908152604080832033845290915290205461226a9084612971565b6001600160a01b0386166000908152600a602090815260408083203384529091529020556122b8565b6001600160a01b0385166000908152600a602090815260408083203384529091528120555b6111ab3386868686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061297d92505050565b612303612770565b6001600160a01b0381166123685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aad565b61105a81612c3a565b60006123c5863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250612c8a915050565b9695505050505050565b6000612161613111565b336001600160a01b038216036123ee57600080fd5b6001600160a01b0381166000818152601560209081526040808320338085529252808320805460ff19169055519092917f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa191a350565b60008260405160200161245791906149b5565b60408051808303601f190181529082905280516020909101206329965a1d60e01b8252306004830152602482018190526001600160a01b03841660448301529150731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b1580156124d157600080fd5b505af11580156124e5573d6000803e3d6000fd5b50505050505050565b60018060008360405160200161250491906149b5565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff191691151591909117905550565b612545828261308e565b156125925760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006044820152606401610aad565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6001600160a01b03841660009081526013602090815260408083208984529091529020548311156125fa5760405162461bcd60e51b8152600401610aad90614ae7565b61260a8686866000878787613134565b61261a86868660008787876131f6565b61262584878561327e565b61263185858585613540565b836001600160a01b0316856001600160a01b0316877fce306c3dbc4a497124b5a4f2be8388b41084c1d74663da27ecee1186c00239bf8685604051612677929190614b03565b60405180910390a4505050505050565b60005b6016548110156126f357600060176000601684815481106126ad576126ad614954565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055806126eb81614980565b91505061268a565b5060005b815181101561275c5760016017600084848151811061271857612718614954565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061275481614980565b9150506126f7565b508051611616906016906020840190613d41565b336127796115f5565b6001600160a01b0316146112ec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aad565b60005b6000838152601a602052604090205481101561285b576000838152601b60209081526040808320601a909252822080548391908590811061281557612815614954565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790558061285381614980565b9150506127d2565b5060005b81518110156128d2576000838152601b6020526040812083516001929085908590811061288e5761288e614954565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806128ca81614980565b91505061285f565b506000828152601a602090815260409091208251610db392840190613d41565b6000816001600160a01b0316836001600160a01b0316148061293957506001600160a01b0380841660009081526015602090815260408083209386168352929052205460ff165b80611bd75750600854610100900460ff168015611bd7575050506001600160a01b031660009081526017602052604090205460ff1690565b6000611bd78284614a7f565b60145460000361299f5760405162461bcd60e51b8152600401610aad90614a63565b816000805b601454811015612aa6576001600160a01b038716600090815260136020526040812060148054919291849081106129dd576129dd614954565b90600052602060002001548152602001908152602001600020549150818311612a4557612a3b60148281548110612a1657612a16614954565b9060005260206000200154898989878960405180602001604052806000815250612c8a565b5060009250612aa6565b8115612a9457612a8660148281548110612a6157612a61614954565b9060005260206000200154898989868960405180602001604052806000815250612c8a565b50612a918284614a7f565b92505b80612a9e81614980565b9150506129a4565b5081156124e55760405162461bcd60e51b8152600401610aad90614ae7565b612ad06002826136b8565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b612b2685856000868686604051806020016040528060008152506131f6565b612b328484848461373a565b612b3d838684613863565b612b5c85856000868686604051806020016040528060008152506139a7565b826001600160a01b0316846001600160a01b0316867ff0ded82afbb1bb3ff3fc48cb2a26584aa84e4af0bf309c804ecdb94d0f6a98bb8585604051612ba2929190614b1c565b60405180910390a45050505050565b6000612bbd83836128f2565b80612bf557506001600160a01b03808316600090815260196020908152604080832088845282528083209387168352929052205460ff165b806112c35750600854610100900460ff1680156112c3575050506000918252601b602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03851660009081526013602090815260408083208a8452909152812054841115612ccd5760405162461bcd60e51b8152600401610aad90614ae7565b8151889015801590612ce157506040845110155b15612cf357612cf08985613a2f565b90505b612d0289898989898989613134565b612d11898989898989896131f6565b612d1c878a8761327e565b612d27878787613a5b565b612d32868287613863565b612d41818989898989896139a7565b856001600160a01b0316876001600160a01b03168a7fff4e9a26af4eb73b8bacfaa4abd4fea03d9448e7b912dc5ff4019048875aa2d48b898989604051612d8b9493929190614b4f565b60405180910390a4888114612dd65780897f67c8ba31d2dd11f1384577b3405b04ed91eed1231e408432ad2458cab37b2fa187604051612dcd91815260200190565b60405180910390a35b98975050505050505050565b612e0e6040518060400160405280600a81526020016922a92199182a37b5b2b760b11b81525083612444565b612e3c6040518060400160405280600c81526020016b22a921989a18182a37b5b2b760a11b81525083612444565b8015611616576008805460ff191660011790555050565b601454600003612e755760405162461bcd60e51b8152600401610aad90614a63565b816000805b601454811015612f71576001600160a01b03861660009081526013602052604081206014805491929184908110612eb357612eb3614954565b90600052602060002001548152602001908152602001600020549150818311612f1957612f1060148281548110612eec57612eec614954565b906000526020600020015488888688604051806020016040528060008152506125b7565b60009250612f71565b612f5360148281548110612f2f57612f2f614954565b906000526020600020015488888588604051806020016040528060008152506125b7565b612f5d8284614a7f565b925080612f6981614980565b915050612e7a565b5081156109eb5760405162461bcd60e51b8152600401610aad90614ae7565b612f9b60028261253b565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6000612fde3086613ba2565b90506001600160a01b03811615801590612ff55750835b156130325761300381611adf565b156130115761301181612ac5565b6001600160a01b0381166000908152601760205260409020805460ff191690555b61303c8587612444565b82801561304f575061304d86611adf565b155b1561305d5761305d86612f90565b81156109eb576001600160a01b0386166000908152601760205260409020805460ff19166001179055505050505050565b60006001600160a01b0382166130f15760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b6064820152608401610aad565b506001600160a01b03166000908152602091909152604090205460ff1690565b46600090815260036020526040812054801561312c57919050565b61101f613c51565b600061316b866040518060400160405280601381526020017222a921989a18182a37b5b2b739a9b2b73232b960691b815250613ba2565b90506001600160a01b038116156131ec5760405163139d569560e21b81526001600160a01b03821690634e755a54906131b99060009036908d908d908d908d908d908d908d90600401614b93565b600060405180830381600087803b1580156131d357600080fd5b505af11580156131e7573d6000803e3d6000fd5b505050505b5050505050505050565b6000613230306040518060400160405280601681526020017522a921989a18182a37b5b2b739ab30b634b230ba37b960511b815250613ba2565b90506001600160a01b038116156131ec57604051632907d53b60e11b81526001600160a01b0382169063520faa76906131b99060009036908d908d908d908d908d908d908d90600401614b93565b6001600160a01b03831660009081526013602090815260408083208584529091529020546132ac9082612971565b6001600160a01b03841660009081526013602090815260408083208684528252808320939093556010905220546132e39082612971565b6000838152601060205260408120829055036133d1576000828152600f6020526040902054806133255760405162461bcd60e51b8152600401610aad90614c0d565b600e80546000919061333990600190614a7f565b8154811061334957613349614954565b9060005260206000200154905080600e6001846133669190614a7f565b8154811061337657613376614954565b6000918252602080832090910192909255828152600f90915260409020829055600e8054806133a7576133a7614a92565b600082815260208082208301600019908101839055909201909255858252600f9052604081205550505b6001600160a01b03831660009081526013602090815260408083208584529091528120549003610db3576001600160a01b03831660009081526012602090815260408083208584529091529020548061343c5760405162461bcd60e51b8152600401610aad90614c0d565b6001600160a01b0384166000908152601160205260408120805461346290600190614a7f565b8154811061347257613472614954565b60009182526020808320909101546001600160a01b03881683526011909152604090912090915081906134a6600185614a7f565b815481106134b6576134b6614954565b60009182526020808320909101929092556001600160a01b038716808252601283526040808320858452845280832086905590825260119092522080548061350057613500614a92565b6000828152602080822083016000199081018390559092019092556001600160a01b03871682526012815260408083208784529091528120555050505050565b60085460ff16156135635760405162461bcd60e51b8152600401610aad90614c29565b61356c82613c75565b6135885760405162461bcd60e51b8152600401610aad90614c0d565b6001600160a01b0383166135ae5760405162461bcd60e51b8152600401610aad90614999565b6001600160a01b0383166000908152600960205260409020548211156135e65760405162461bcd60e51b8152600401610aad90614ae7565b6001600160a01b0383166000908152600960205260409020546136099083612971565b6001600160a01b03841660009081526009602052604090205560075461362f9083612971565b600781905550826001600160a01b0316846001600160a01b03167fb7d0d6b60740753e9f16692a2f479472a1385aec2420fa43225b02f2ffa1afe7848460405161367a929190614b03565b60405180910390a36040518281526000906001600160a01b03851690600080516020614cb6833981519152906020015b60405180910390a350505050565b6136c2828261308e565b6137185760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b6064820152608401610aad565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b60085460ff161561375d5760405162461bcd60e51b8152600401610aad90614c29565b61376682613c75565b6137825760405162461bcd60e51b8152600401610aad90614c0d565b6001600160a01b0383166137a85760405162461bcd60e51b8152600401610aad90614c45565b6007546137b59083613c98565b6007556001600160a01b0383166000908152600960205260409020546137db9083613c98565b6001600160a01b0380851660008181526009602052604090819020939093559151908616907f0e9905d62635f049c2f4e11678ebf9dc3d1f8c4a653e290759b772e47ba00d009061382f9086908690614b03565b60405180910390a36040518281526001600160a01b03841690600090600080516020614cb6833981519152906020016136aa565b8015610db3576001600160a01b038316600090815260126020908152604080832085845290915281205490036138d7576001600160a01b0383166000818152601160209081526040808320805460018101825581855283852001879055938352925460128252838320868452909152919020555b6001600160a01b03831660009081526013602090815260408083208584529091529020546139059082613c98565b6001600160a01b0384166000908152601360209081526040808320868452825280832093909355600f905290812054900361397a57600e80546001810182557fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd01839055546000838152600f60205260409020555b6000828152601060205260409020546139939082613c98565b600083815260106020526040902055505050565b60006139e18560405180604001604052806016815260200175115490cc4d0c0c151bdad95b9cd49958da5c1a595b9d60521b815250613ba2565b90506001600160a01b038116156131ec57604051637a325abb60e11b81526001600160a01b0382169063f464b576906131b99060009036908d908d908d908d908d908d908d90600401614b93565b60208101516000906000199060018101613a4f5760408401519250613a53565b8492505b505092915050565b60085460ff1615613a7e5760405162461bcd60e51b8152600401610aad90614c29565b613a8781613c75565b613aa35760405162461bcd60e51b8152600401610aad90614c0d565b6001600160a01b038216613ac95760405162461bcd60e51b8152600401610aad90614c45565b6001600160a01b038316600090815260096020526040902054811115613b015760405162461bcd60e51b8152600401610aad90614ae7565b6001600160a01b038316600090815260096020526040902054613b249082612971565b6001600160a01b038085166000908152600960205260408082209390935590841681522054613b539082613c98565b6001600160a01b038084166000818152600960205260409081902093909355915190851690600080516020614cb683398151915290613b959085815260200190565b60405180910390a3505050565b60008082604051602001613bb691906149b5565b60408051808303601f1901815290829052805160209091012063555ddc6560e11b82526001600160a01b0386166004830152602482018190529150731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015613c2d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c39190614aca565b60004681613c5d611a2b565b60009283526003602052604090922082905550919050565b6006546000908290613c9190613c8b8382613ca4565b90613cb0565b1492915050565b6000611bd78284614c61565b6000611bd78284614c74565b6000611bd78284614c96565b508054613cc8906147c8565b6000825580601f10613cd8575050565b601f01602090049060005260206000209081019061105a9190613d96565b828054828255906000526020600020908101928215613d31579160200282015b82811115613d31578235825591602001919060010190613d16565b50613d3d929150613d96565b5090565b828054828255906000526020600020908101928215613d31579160200282015b82811115613d3157825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613d61565b5b80821115613d3d5760008155600101613d97565b60008083601f840112613dbd57600080fd5b5081356001600160401b03811115613dd457600080fd5b602083019150836020828501011115613dec57600080fd5b9250929050565b60008060008060608587031215613e0957600080fd5b8435935060208501356001600160401b03811115613e2657600080fd5b613e3287828801613dab565b9598909750949560400135949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613e8357613e83613e45565b604052919050565b60006001600160401b03821115613ea457613ea4613e45565b5060051b60200190565b600082601f830112613ebf57600080fd5b81356020613ed4613ecf83613e8b565b613e5b565b82815260059290921b84018101918181019086841115613ef357600080fd5b8286015b84811015613f0e5780358352918301918301613ef7565b509695505050505050565b6001600160a01b038116811461105a57600080fd5b600082601f830112613f3f57600080fd5b81356020613f4f613ecf83613e8b565b82815260059290921b84018101918181019086841115613f6e57600080fd5b8286015b84811015613f0e578035613f8581613f19565b8352918301918301613f72565b60006001600160401b03821115613fab57613fab613e45565b50601f01601f191660200190565b600082601f830112613fca57600080fd5b8135613fd8613ecf82613f92565b818152846020838601011115613fed57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561402257600080fd5b85356001600160401b038082111561403957600080fd5b61404589838a01613eae565b9650602088013591508082111561405b57600080fd5b61406789838a01613f2e565b9550604088013591508082111561407d57600080fd5b61408989838a01613eae565b9450606088013591508082111561409f57600080fd5b6140ab89838a01613fb9565b935060808801359150808211156140c157600080fd5b506140ce88828901613fb9565b9150509295509295909350565b60005b838110156140f65781810151838201526020016140de565b50506000910152565b600081518084526141178160208601602086016140db565b601f01601f19169290920160200192915050565b602081526000611bd760208301846140ff565b6000806040838503121561415157600080fd5b823561415c81613f19565b946020939093013593505050565b6000806040838503121561417d57600080fd5b82359150602083013561418f81613f19565b809150509250929050565b6000806000606084860312156141af57600080fd5b8335925060208401356141c181613f19565b929592945050506040919091013590565b60008083601f8401126141e457600080fd5b5081356001600160401b038111156141fb57600080fd5b6020830191508360208260051b8501011115613dec57600080fd5b60008060006040848603121561422b57600080fd5b8335925060208401356001600160401b0381111561424857600080fd5b614254868287016141d2565b9497909650939450505050565b60008060006060848603121561427657600080fd5b83359250602084013561428881613f19565b9150604084013561429881613f19565b809150509250925092565b6000806000606084860312156142b857600080fd5b83356142c381613f19565b925060208401356141c181613f19565b600080600080606085870312156142e957600080fd5b84356142f481613f19565b93506020850135925060408501356001600160401b0381111561431657600080fd5b61432287828801613dab565b95989497509550505050565b60006020828403121561434057600080fd5b8135611bd781613f19565b6000806000806060858703121561436157600080fd5b843593506020850135925060408501356001600160401b0381111561431657600080fd5b6000806000806080858703121561439b57600080fd5b84356001600160401b03808211156143b257600080fd5b6143be88838901613eae565b955060208701359150808211156143d457600080fd5b6143e088838901613f2e565b945060408701359150808211156143f657600080fd5b61440288838901613eae565b9350606087013591508082111561441857600080fd5b5061442587828801613fb9565b91505092959194509250565b60008060008060006080868803121561444957600080fd5b85359450602086013561445b81613f19565b93506040860135925060608601356001600160401b0381111561447d57600080fd5b61448988828901613dab565b969995985093965092949392505050565b6020808252825182820181905260009190848201906040850190845b818110156144d2578351835292840192918401916001016144b6565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156144d25783516001600160a01b0316835292840192918401916001016144fa565b60006020828403121561453157600080fd5b5035919050565b60008060008060008060008060c0898b03121561455457600080fd5b88359750602089013561456681613f19565b9650604089013561457681613f19565b95506060890135945060808901356001600160401b038082111561459957600080fd5b6145a58c838d01613dab565b909650945060a08b01359150808211156145be57600080fd5b506145cb8b828c01613dab565b999c989b5096995094979396929594505050565b6001600160a01b0391909116815260200190565b8035801515811461460357600080fd5b919050565b6000806040838503121561461b57600080fd5b823561462681613f19565b9150614634602084016145f3565b90509250929050565b60008060008060008060a0878903121561465657600080fd5b863561466181613f19565b955060208701356001600160401b0381111561467c57600080fd5b61468889828a01613dab565b909650945061469b9050604088016145f3565b92506146a9606088016145f3565b91506146b7608088016145f3565b90509295509295509295565b6060815260006146d660608301866140ff565b60208301949094525060400152919050565b600080604083850312156146fb57600080fd5b823561470681613f19565b9150602083013561418f81613f19565b60008060006040848603121561472b57600080fd5b8335925060208401356001600160401b0381111561474857600080fd5b61425486828701613dab565b6000806020838503121561476757600080fd5b82356001600160401b0381111561477d57600080fd5b614789858286016141d2565b90969095509350505050565b6000806000806000608086880312156147ad57600080fd5b85356147b881613f19565b9450602086013561445b81613f19565b600181811c908216806147dc57607f821691505b6020821081036147fc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610db357600081815260208120601f850160051c810160208610156148295750805b601f850160051c820191505b818110156109eb57828155600101614835565b81516001600160401b0381111561486157614861613e45565b6148758161486f84546147c8565b84614802565b602080601f8311600181146148aa57600084156148925750858301515b600019600386901b1c1916600185901b1785556109eb565b600085815260208120601f198616915b828110156148d9578886015182559484019460019091019084016148ba565b50858210156148f75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000614944604083018587614907565b9050826020830152949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016149925761499261496a565b5060010190565b6020808252600290820152611a9b60f11b604082015260600190565b600082516149c78184602087016140db565b9190910192915050565b602080825260029082015261353360f01b604082015260600190565b6000602082840312156149ff57600080fd5b81516001600160401b03811115614a1557600080fd5b8201601f81018413614a2657600080fd5b8051614a34613ecf82613f92565b818152856020838501011115614a4957600080fd5b614a5a8260208301602086016140db565b95945050505050565b602080825260029082015261353560f01b604082015260600190565b81810381811115610b1557610b1561496a565b634e487b7160e01b600052603160045260246000fd5b604081526000614abb60408301856140ff565b90508260208301529392505050565b600060208284031215614adc57600080fd5b8151611bd781613f19565b6020808252600290820152611a9960f11b604082015260600190565b8281526040602082015260006112c360408301846140ff565b828152606060208201526000614b3560608301846140ff565b828103604084015260008152602081019150509392505050565b60018060a01b0385168152836020820152608060408201526000614b7660808301856140ff565b8281036060840152614b8881856140ff565b979650505050505050565b6000610100808352614ba88184018c8e614907565b602084018b90526001600160a01b038a8116604086015289811660608601528816608085015260a0840187905283810360c08501529050614be981866140ff565b905082810360e0840152614bfd81856140ff565b9c9b505050505050505050505050565b602080825260029082015261035360f41b604082015260600190565b6020808252600290820152610d4d60f21b604082015260600190565b602080825260029082015261353760f01b604082015260600190565b80820180821115610b1557610b1561496a565b600082614c9157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614cb057614cb061496a565b50029056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212205cf5517dca73d781329c4527ec52d9a9d1ff50b2ff7a28ca63e5ac9dff20a17d64736f6c63430008100033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/graph/abis/CapTableRegistry.json b/packages/graph/abis/CapTableRegistry.json deleted file mode 100644 index 24d9ab1..0000000 --- a/packages/graph/abis/CapTableRegistry.json +++ /dev/null @@ -1,692 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "CapTableRegistry", - "sourceName": "contracts/capTable/CapTableRegistry.sol", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "authenticatedAddress", - "type": "address" - } - ], - "name": "AuthenticatedPerson", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "capTableAddress", - "type": "address" - }, - { - "indexed": true, - "internalType": "string", - "name": "id", - "type": "string" - } - ], - "name": "CapTableAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "capTableAddress", - "type": "address" - }, - { - "indexed": true, - "internalType": "string", - "name": "id", - "type": "string" - } - ], - "name": "CapTableRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "contractAddress", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "ContractRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "contractAddress", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "PersonAuthenticatedContract", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OPERATOR_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "adr", - "type": "address" - }, - { - "internalType": "string", - "name": "id", - "type": "string" - } - ], - "name": "addCapTable", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_operatorAddress", - "type": "address" - }, - { - "internalType": "string", - "name": "_operatorName", - "type": "string" - } - ], - "name": "authenticateOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_operatorAddress", - "type": "address" - }, - { - "internalType": "string", - "name": "_operatorName", - "type": "string" - }, - { - "internalType": "string", - "name": "_did", - "type": "string" - } - ], - "name": "authenticateOperatorWithDID", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "changeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_operatorAddress", - "type": "address" - }, - { - "internalType": "string", - "name": "_operatorName", - "type": "string" - } - ], - "name": "changeOperatorName", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "internalType": "uint256", - "name": "timeValid", - "type": "uint256" - } - ], - "name": "checkAuthenticated", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "checkAuthenticatedOnce", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getActiveCapTablesCount", - "outputs": [ - { - "internalType": "uint256", - "name": "activeCapTables", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "id", - "type": "string" - } - ], - "name": "getAddress", - "outputs": [ - { - "internalType": "address", - "name": "capTableAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getCapTableList", - "outputs": [ - { - "internalType": "address[]", - "name": "capTableList", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "adr", - "type": "address" - } - ], - "name": "getId", - "outputs": [ - { - "internalType": "string", - "name": "id", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "adr", - "type": "address" - } - ], - "name": "getOperatorDID", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "adr", - "type": "address" - } - ], - "name": "getOperatorForCapTable", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_operatorAddress", - "type": "address" - } - ], - "name": "getOperatorName", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "getOperatorOf", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "adr", - "type": "address" - } - ], - "name": "getStatus", - "outputs": [ - { - "internalType": "uint256", - "name": "status", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "adr", - "type": "address" - } - ], - "name": "removeCapTable", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "revokeAuthenticationContract", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "revokeAuthenticationPerson", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "revokeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "setAuthenticatedContract", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "setAuthenticatedPerson", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b5061001c60003361004b565b6100467f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9293361004b565b6100ea565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166100e6576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556100a53390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b611ca780620000fa6000396000f3fe608060405234801561001057600080fd5b506004361061016a5760003560e01c806301ffc9a71461016f5780630e77f734146101975780631302cd52146101b75780631a24cd8f146101cc578063248a9ca3146101df578063265967b4146102005780632f2ff15d1461021357806330ccebb51461022657806336568abe1461024f57806359fa131b146102625780635c7c363b1461028d57806365f68c89146102a05780636ceb121c146102b3578063757fa2a5146102c85780637f7fe058146102d05780638938119e146102fc5780638f2839701461030f57806391d148541461032257806391e6afa714610335578063936d76e314610348578063a0e0ce3d1461035b578063a217fddf1461036e578063b3cf6e5214610376578063bf40fac114610389578063d547741f1461039c578063e32313ab146103af578063f1801c99146103c2578063f4f3d37b146103d5578063f5b541a6146103e8578063fad8b32a146103fd575b600080fd5b61018261017d36600461164d565b610410565b60405190151581526020015b60405180910390f35b6101aa6101a5366004611693565b610447565b60405161018e91906116d2565b6101ca6101c536600461174d565b610521565b005b6101ca6101da36600461174d565b610562565b6101f26101ed36600461179f565b6107f8565b60405190815260200161018e565b6101ca61020e366004611693565b61080d565b6101ca6102213660046117b8565b6108b9565b6101f2610234366004611693565b6001600160a01b031660009081526008602052604090205490565b6101ca61025d3660046117b8565b6108d5565b610275610270366004611693565b610953565b6040516001600160a01b03909116815260200161018e565b6101ca61029b366004611693565b61099c565b6101aa6102ae366004611693565b610ac7565b6102bb610aee565b60405161018e91906117e4565b6005546101f2565b6102756102de366004611693565b6001600160a01b039081166000908152600160205260409020541690565b6101ca61030a366004611693565b610b50565b6101ca61031d366004611693565b610c9e565b6101826103303660046117b8565b610cb7565b6101ca610343366004611693565b610ce0565b6101ca610356366004611831565b610e15565b6101aa610369366004611693565b610e95565b6101f2600081565b6101ca61038436600461174d565b610ebc565b6102756103973660046118b1565b610ef1565b6101ca6103aa3660046117b8565b610f26565b6101ca6103bd366004611693565b610f42565b6101826103d0366004611693565b6111b8565b6101826103e33660046118f2565b61123b565b6101f2600080516020611c5283398151915281565b6101ca61040b366004611693565b61133c565b60006001600160e01b03198216637965db0b60e01b148061044157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060610461600080516020611c5283398151915283610cb7565b61047a5760405180602001604052806000815250610441565b6001600160a01b0382166000908152600a60205260409020805461049d9061191c565b80601f01602080910402602001604051908101604052809291908181526020018280546104c99061191c565b80156105165780601f106104eb57610100808354040283529160200191610516565b820191906000526020600020905b8154815290600101906020018083116104f957829003601f168201915b505050505092915050565b6001600160a01b03831660009081526003602052604090206105448284836119cf565b5061055d600080516020611c52833981519152846108b9565b505050565b600080516020611c5283398151915261057a81611354565b60006001600160a01b031660078484604051610597929190611a88565b908152604051908190036020019020546001600160a01b0316146105fa5760405162461bcd60e51b8152602060048201526015602482015274696420697320616c6c726561647920696e2075736560581b60448201526064015b60405180910390fd5b6001600160a01b0384166106505760405162461bcd60e51b815260206004820152601e60248201527f616464726573732063616e6e6f74206265207a65726f2061646472657373000060448201526064016105f1565b6001600160a01b038416600090815260066020526040812080546106739061191c565b1591508190506106c25760405162461bcd60e51b815260206004820152601a6024820152796164647265737320697320616c6c726561647920696e2075736560301b60448201526064016105f1565b600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b03871617905560405185906007906107229087908790611a88565b908152604080516020928190038301902080546001600160a01b0319166001600160a01b0394851617905591871660009081526006909152206107668486836119cf565b506005805460010190556001600160a01b038516600090815260096020908152604080832080546001600160a01b0319163317905560089091529081902060029055516107b69085908590611a88565b604051908190038120906001600160a01b038716907f1f680ae2258d5672c8d8f3f2e4e5d4a4ee688f56e74c9ee8ef327c3d1205247390600090a35050505050565b60009081526020819052604090206001015490565b6001600160a01b0381811660009081526001602052604090205416331461089c5760405162461bcd60e51b815260206004820152603e60248201527f4f6e6c7920746865206f70657261746f7220746861742061757468656e74696360448201527f617465642074686520616464726573732063616e207265766f6b65206974000060648201526084016105f1565b6001600160a01b0316600090815260016020819052604082200155565b6108c2826107f8565b6108cb81611354565b61055d838361135e565b6001600160a01b03811633146109455760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016105f1565b61094f82826113e2565b5050565b6001600160a01b03808216600090815260096020526040812054909116610988600080516020611c5283398151915282610cb7565b610993576000610995565b805b9392505050565b3360009081526001602081905260409091200154610a085760405162461bcd60e51b8152602060048201526024808201527f4d73672e73656e646572206e6565647320746f2062652061757468656e746963604482015263185d195960e21b60648201526084016105f1565b6001600160a01b038181166000908152600260205260409020541615610a705760405162461bcd60e51b815260206004820152601e60248201527f436f6e747261637420616c72656164792061757468656e74696361746564000060448201526064016105f1565b6001600160a01b03811660008181526002602052604080822080546001600160a01b0319163390811790915590519092917f6923f8bdded817154d389a68dd1653189da4bb64316742f2e8715f5666fe765291a350565b6001600160a01b038116600090815260066020526040902080546060919061049d9061191c565b60606004805480602002602001604051908101604052809291908181526020018280548015610b4657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b28575b5050505050905090565b600080516020611c52833981519152610b6881611354565b6001600160a01b038281166000908152600160205260409020541615610c26576001600160a01b03828116600090815260016020526040902054163314610c265760405162461bcd60e51b815260206004820152604660248201527f41206e6577206f70657261746f722063616e206e6f742061757468656e74696360448201527f61746520612077616c6c6574206f776e656420627920616e6f74686572206f7060648201526532b930ba37b960d11b608482015260a4016105f1565b6040805180820182523381524260208083019182526001600160a01b038681166000818152600193849052868120955186546001600160a01b03191693169290921785559251939091019290925591517fa9586a145b7f42b11f0f9c50b278e7859233b30d9908848bc7c43e3c3a6895c29190a25050565b610ca96000826108b9565b610cb4600033610f26565b50565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6001600160a01b03808216600090815260026020908152604080832054841680845260019092529091205490911633821480610d2457506001600160a01b03811633145b610da85760405162461bcd60e51b815260206004820152604960248201527f4f6e6c7920746865206f776e6572206f662074686520636f6e7472616374206f60448201527f722069742773206f70657261746f722063616e207265766f6b65206175746865606482015268373a34b1b0ba34b7b760b91b608482015260a4016105f1565b6001600160a01b038084166000818152600260205260408082205490519316927f23dd6441bb4f9d75ec0b57c0dcc3825318a042cb2b024bb8c89dfaf77dbe0e5a9190a350506001600160a01b0316600090815260026020526040902080546001600160a01b0319169055565b600080516020611c52833981519152610e2d81611354565b6001600160a01b0386166000908152600360205260409020610e508587836119cf565b50610e69600080516020611c52833981519152876108b9565b6001600160a01b0386166000908152600a60205260409020610e8c8385836119cf565b50505050505050565b6001600160a01b038116600090815260036020526040902080546060919061049d9061191c565b6000610ec781611354565b6001600160a01b0384166000908152600360205260409020610eea8385836119cf565b5050505050565b600060078383604051610f05929190611a88565b908152604051908190036020019020546001600160a01b0316905092915050565b610f2f826107f8565b610f3881611354565b61055d83836113e2565b600080516020611c52833981519152610f5a81611354565b6001600160a01b03821660009081526006602052604081208054610f7d9061191c565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa99061191c565b8015610ff65780601f10610fcb57610100808354040283529160200191610ff6565b820191906000526020600020905b815481529060010190602001808311610fd957829003601f168201915b5050505050905060006001600160a01b03166007826040516110189190611a98565b908152604051908190036020019020546001600160a01b03160361107c5760405162461bcd60e51b815260206004820152601b60248201527a1b9bc81859191c995cdcc81c9959da5cdd195c9959081bdb881a59602a1b60448201526064016105f1565b80511580156110cb5760405162461bcd60e51b815260206004820152601b60248201527a6e6f2069642072656769737465726564206f6e206164647265737360281b60448201526064016105f1565b60006007836040516110dd9190611a98565b908152604080516020928190038301812080546001600160a01b0319166001600160a01b0395861617905582810182526000808252938816845260069092529091209061112a9082611ab4565b50600580546000190190556001600160a01b038416600090815260096020908152604080832080546001600160a01b03191690556008909152908190206004905551611177908390611a98565b604051908190038120906001600160a01b038616907f354a20d8f57c2c26bc5615304de4d496a4b210244ad6f04f55f67e035acc904290600090a350505050565b6000806111d3600080516020611c5283398151915284610cb7565b806111e457506111e4600084610cb7565b6001600160a01b03848116600081815260026020908152604080832054600192839052922001549394509091161515911515901582806112215750815b806112295750835b806112315750805b9695505050505050565b6000611255600080516020611c5283398151915284610cb7565b806112665750611266600084610cb7565b1561127357506001610441565b6001600160a01b0383811660009081526002602052604090205416156112cd576001600160a01b0380841660009081526002602090815260408083205490931682526001908190529190200154156112cd57506001610441565b6001600160a01b0383166000908152600160208190526040909120015415611333576001600160a01b038316600090815260016020819052604082200154906113168483611b83565b90506000808311801561132857508142105b935061044192505050565b50600092915050565b610cb4600080516020611c5283398151915282610f26565b610cb48133611447565b6113688282610cb7565b61094f576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561139e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6113ec8282610cb7565b1561094f576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6114518282610cb7565b61094f5761145e816114a0565b6114698360206114b2565b60405160200161147a929190611b96565b60408051601f198184030181529082905262461bcd60e51b82526105f1916004016116d2565b60606104416001600160a01b03831660145b606060006114c1836002611c05565b6114cc906002611b83565b6001600160401b038111156114e3576114e3611956565b6040519080825280601f01601f19166020018201604052801561150d576020820181803683370190505b509050600360fc1b8160008151811061152857611528611c24565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061155757611557611c24565b60200101906001600160f81b031916908160001a905350600061157b846002611c05565b611586906001611b83565b90505b60018111156115fe576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106115ba576115ba611c24565b1a60f81b8282815181106115d0576115d0611c24565b60200101906001600160f81b031916908160001a90535060049490941c936115f781611c3a565b9050611589565b5083156109955760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105f1565b60006020828403121561165f57600080fd5b81356001600160e01b03198116811461099557600080fd5b80356001600160a01b038116811461168e57600080fd5b919050565b6000602082840312156116a557600080fd5b61099582611677565b60005b838110156116c95781810151838201526020016116b1565b50506000910152565b60208152600082518060208401526116f18160408501602087016116ae565b601f01601f19169190910160400192915050565b60008083601f84011261171757600080fd5b5081356001600160401b0381111561172e57600080fd5b60208301915083602082850101111561174657600080fd5b9250929050565b60008060006040848603121561176257600080fd5b61176b84611677565b925060208401356001600160401b0381111561178657600080fd5b61179286828701611705565b9497909650939450505050565b6000602082840312156117b157600080fd5b5035919050565b600080604083850312156117cb57600080fd5b823591506117db60208401611677565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156118255783516001600160a01b031683529284019291840191600101611800565b50909695505050505050565b60008060008060006060868803121561184957600080fd5b61185286611677565b945060208601356001600160401b038082111561186e57600080fd5b61187a89838a01611705565b9096509450604088013591508082111561189357600080fd5b506118a088828901611705565b969995985093965092949392505050565b600080602083850312156118c457600080fd5b82356001600160401b038111156118da57600080fd5b6118e685828601611705565b90969095509350505050565b6000806040838503121561190557600080fd5b61190e83611677565b946020939093013593505050565b600181811c9082168061193057607f821691505b60208210810361195057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b601f82111561055d57600081815260208120601f850160051c810160208610156119935750805b601f850160051c820191505b818110156119b25782815560010161199f565b505050505050565b600019600383901b1c191660019190911b1790565b6001600160401b038311156119e6576119e6611956565b6119fa836119f4835461191c565b8361196c565b6000601f841160018114611a285760008515611a165750838201355b611a2086826119ba565b845550610eea565b600083815260209020601f19861690835b82811015611a595786850135825560209485019460019092019101611a39565b5086821015611a765760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8183823760009101908152919050565b60008251611aaa8184602087016116ae565b9190910192915050565b81516001600160401b03811115611acd57611acd611956565b611ae181611adb845461191c565b8461196c565b602080601f831160018114611b105760008415611afe5750858301515b611b0885826119ba565b8655506119b2565b600085815260208120601f198616915b82811015611b3f57888601518255948401946001909101908401611b20565b5085821015611b5d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082018082111561044157610441611b6d565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351611bc88160178501602088016116ae565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611bf98160288401602088016116ae565b01602801949350505050565b6000816000190483118215151615611c1f57611c1f611b6d565b500290565b634e487b7160e01b600052603260045260246000fd5b600081611c4957611c49611b6d565b50600019019056fe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a26469706673582212209c0969a2e541138027f7f309636a3ae9f0679dd7603f4b5561221bb49bbe7d2b64736f6c63430008100033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061016a5760003560e01c806301ffc9a71461016f5780630e77f734146101975780631302cd52146101b75780631a24cd8f146101cc578063248a9ca3146101df578063265967b4146102005780632f2ff15d1461021357806330ccebb51461022657806336568abe1461024f57806359fa131b146102625780635c7c363b1461028d57806365f68c89146102a05780636ceb121c146102b3578063757fa2a5146102c85780637f7fe058146102d05780638938119e146102fc5780638f2839701461030f57806391d148541461032257806391e6afa714610335578063936d76e314610348578063a0e0ce3d1461035b578063a217fddf1461036e578063b3cf6e5214610376578063bf40fac114610389578063d547741f1461039c578063e32313ab146103af578063f1801c99146103c2578063f4f3d37b146103d5578063f5b541a6146103e8578063fad8b32a146103fd575b600080fd5b61018261017d36600461164d565b610410565b60405190151581526020015b60405180910390f35b6101aa6101a5366004611693565b610447565b60405161018e91906116d2565b6101ca6101c536600461174d565b610521565b005b6101ca6101da36600461174d565b610562565b6101f26101ed36600461179f565b6107f8565b60405190815260200161018e565b6101ca61020e366004611693565b61080d565b6101ca6102213660046117b8565b6108b9565b6101f2610234366004611693565b6001600160a01b031660009081526008602052604090205490565b6101ca61025d3660046117b8565b6108d5565b610275610270366004611693565b610953565b6040516001600160a01b03909116815260200161018e565b6101ca61029b366004611693565b61099c565b6101aa6102ae366004611693565b610ac7565b6102bb610aee565b60405161018e91906117e4565b6005546101f2565b6102756102de366004611693565b6001600160a01b039081166000908152600160205260409020541690565b6101ca61030a366004611693565b610b50565b6101ca61031d366004611693565b610c9e565b6101826103303660046117b8565b610cb7565b6101ca610343366004611693565b610ce0565b6101ca610356366004611831565b610e15565b6101aa610369366004611693565b610e95565b6101f2600081565b6101ca61038436600461174d565b610ebc565b6102756103973660046118b1565b610ef1565b6101ca6103aa3660046117b8565b610f26565b6101ca6103bd366004611693565b610f42565b6101826103d0366004611693565b6111b8565b6101826103e33660046118f2565b61123b565b6101f2600080516020611c5283398151915281565b6101ca61040b366004611693565b61133c565b60006001600160e01b03198216637965db0b60e01b148061044157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060610461600080516020611c5283398151915283610cb7565b61047a5760405180602001604052806000815250610441565b6001600160a01b0382166000908152600a60205260409020805461049d9061191c565b80601f01602080910402602001604051908101604052809291908181526020018280546104c99061191c565b80156105165780601f106104eb57610100808354040283529160200191610516565b820191906000526020600020905b8154815290600101906020018083116104f957829003601f168201915b505050505092915050565b6001600160a01b03831660009081526003602052604090206105448284836119cf565b5061055d600080516020611c52833981519152846108b9565b505050565b600080516020611c5283398151915261057a81611354565b60006001600160a01b031660078484604051610597929190611a88565b908152604051908190036020019020546001600160a01b0316146105fa5760405162461bcd60e51b8152602060048201526015602482015274696420697320616c6c726561647920696e2075736560581b60448201526064015b60405180910390fd5b6001600160a01b0384166106505760405162461bcd60e51b815260206004820152601e60248201527f616464726573732063616e6e6f74206265207a65726f2061646472657373000060448201526064016105f1565b6001600160a01b038416600090815260066020526040812080546106739061191c565b1591508190506106c25760405162461bcd60e51b815260206004820152601a6024820152796164647265737320697320616c6c726561647920696e2075736560301b60448201526064016105f1565b600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b03871617905560405185906007906107229087908790611a88565b908152604080516020928190038301902080546001600160a01b0319166001600160a01b0394851617905591871660009081526006909152206107668486836119cf565b506005805460010190556001600160a01b038516600090815260096020908152604080832080546001600160a01b0319163317905560089091529081902060029055516107b69085908590611a88565b604051908190038120906001600160a01b038716907f1f680ae2258d5672c8d8f3f2e4e5d4a4ee688f56e74c9ee8ef327c3d1205247390600090a35050505050565b60009081526020819052604090206001015490565b6001600160a01b0381811660009081526001602052604090205416331461089c5760405162461bcd60e51b815260206004820152603e60248201527f4f6e6c7920746865206f70657261746f7220746861742061757468656e74696360448201527f617465642074686520616464726573732063616e207265766f6b65206974000060648201526084016105f1565b6001600160a01b0316600090815260016020819052604082200155565b6108c2826107f8565b6108cb81611354565b61055d838361135e565b6001600160a01b03811633146109455760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016105f1565b61094f82826113e2565b5050565b6001600160a01b03808216600090815260096020526040812054909116610988600080516020611c5283398151915282610cb7565b610993576000610995565b805b9392505050565b3360009081526001602081905260409091200154610a085760405162461bcd60e51b8152602060048201526024808201527f4d73672e73656e646572206e6565647320746f2062652061757468656e746963604482015263185d195960e21b60648201526084016105f1565b6001600160a01b038181166000908152600260205260409020541615610a705760405162461bcd60e51b815260206004820152601e60248201527f436f6e747261637420616c72656164792061757468656e74696361746564000060448201526064016105f1565b6001600160a01b03811660008181526002602052604080822080546001600160a01b0319163390811790915590519092917f6923f8bdded817154d389a68dd1653189da4bb64316742f2e8715f5666fe765291a350565b6001600160a01b038116600090815260066020526040902080546060919061049d9061191c565b60606004805480602002602001604051908101604052809291908181526020018280548015610b4657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b28575b5050505050905090565b600080516020611c52833981519152610b6881611354565b6001600160a01b038281166000908152600160205260409020541615610c26576001600160a01b03828116600090815260016020526040902054163314610c265760405162461bcd60e51b815260206004820152604660248201527f41206e6577206f70657261746f722063616e206e6f742061757468656e74696360448201527f61746520612077616c6c6574206f776e656420627920616e6f74686572206f7060648201526532b930ba37b960d11b608482015260a4016105f1565b6040805180820182523381524260208083019182526001600160a01b038681166000818152600193849052868120955186546001600160a01b03191693169290921785559251939091019290925591517fa9586a145b7f42b11f0f9c50b278e7859233b30d9908848bc7c43e3c3a6895c29190a25050565b610ca96000826108b9565b610cb4600033610f26565b50565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6001600160a01b03808216600090815260026020908152604080832054841680845260019092529091205490911633821480610d2457506001600160a01b03811633145b610da85760405162461bcd60e51b815260206004820152604960248201527f4f6e6c7920746865206f776e6572206f662074686520636f6e7472616374206f60448201527f722069742773206f70657261746f722063616e207265766f6b65206175746865606482015268373a34b1b0ba34b7b760b91b608482015260a4016105f1565b6001600160a01b038084166000818152600260205260408082205490519316927f23dd6441bb4f9d75ec0b57c0dcc3825318a042cb2b024bb8c89dfaf77dbe0e5a9190a350506001600160a01b0316600090815260026020526040902080546001600160a01b0319169055565b600080516020611c52833981519152610e2d81611354565b6001600160a01b0386166000908152600360205260409020610e508587836119cf565b50610e69600080516020611c52833981519152876108b9565b6001600160a01b0386166000908152600a60205260409020610e8c8385836119cf565b50505050505050565b6001600160a01b038116600090815260036020526040902080546060919061049d9061191c565b6000610ec781611354565b6001600160a01b0384166000908152600360205260409020610eea8385836119cf565b5050505050565b600060078383604051610f05929190611a88565b908152604051908190036020019020546001600160a01b0316905092915050565b610f2f826107f8565b610f3881611354565b61055d83836113e2565b600080516020611c52833981519152610f5a81611354565b6001600160a01b03821660009081526006602052604081208054610f7d9061191c565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa99061191c565b8015610ff65780601f10610fcb57610100808354040283529160200191610ff6565b820191906000526020600020905b815481529060010190602001808311610fd957829003601f168201915b5050505050905060006001600160a01b03166007826040516110189190611a98565b908152604051908190036020019020546001600160a01b03160361107c5760405162461bcd60e51b815260206004820152601b60248201527a1b9bc81859191c995cdcc81c9959da5cdd195c9959081bdb881a59602a1b60448201526064016105f1565b80511580156110cb5760405162461bcd60e51b815260206004820152601b60248201527a6e6f2069642072656769737465726564206f6e206164647265737360281b60448201526064016105f1565b60006007836040516110dd9190611a98565b908152604080516020928190038301812080546001600160a01b0319166001600160a01b0395861617905582810182526000808252938816845260069092529091209061112a9082611ab4565b50600580546000190190556001600160a01b038416600090815260096020908152604080832080546001600160a01b03191690556008909152908190206004905551611177908390611a98565b604051908190038120906001600160a01b038616907f354a20d8f57c2c26bc5615304de4d496a4b210244ad6f04f55f67e035acc904290600090a350505050565b6000806111d3600080516020611c5283398151915284610cb7565b806111e457506111e4600084610cb7565b6001600160a01b03848116600081815260026020908152604080832054600192839052922001549394509091161515911515901582806112215750815b806112295750835b806112315750805b9695505050505050565b6000611255600080516020611c5283398151915284610cb7565b806112665750611266600084610cb7565b1561127357506001610441565b6001600160a01b0383811660009081526002602052604090205416156112cd576001600160a01b0380841660009081526002602090815260408083205490931682526001908190529190200154156112cd57506001610441565b6001600160a01b0383166000908152600160208190526040909120015415611333576001600160a01b038316600090815260016020819052604082200154906113168483611b83565b90506000808311801561132857508142105b935061044192505050565b50600092915050565b610cb4600080516020611c5283398151915282610f26565b610cb48133611447565b6113688282610cb7565b61094f576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561139e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6113ec8282610cb7565b1561094f576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6114518282610cb7565b61094f5761145e816114a0565b6114698360206114b2565b60405160200161147a929190611b96565b60408051601f198184030181529082905262461bcd60e51b82526105f1916004016116d2565b60606104416001600160a01b03831660145b606060006114c1836002611c05565b6114cc906002611b83565b6001600160401b038111156114e3576114e3611956565b6040519080825280601f01601f19166020018201604052801561150d576020820181803683370190505b509050600360fc1b8160008151811061152857611528611c24565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061155757611557611c24565b60200101906001600160f81b031916908160001a905350600061157b846002611c05565b611586906001611b83565b90505b60018111156115fe576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106115ba576115ba611c24565b1a60f81b8282815181106115d0576115d0611c24565b60200101906001600160f81b031916908160001a90535060049490941c936115f781611c3a565b9050611589565b5083156109955760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105f1565b60006020828403121561165f57600080fd5b81356001600160e01b03198116811461099557600080fd5b80356001600160a01b038116811461168e57600080fd5b919050565b6000602082840312156116a557600080fd5b61099582611677565b60005b838110156116c95781810151838201526020016116b1565b50506000910152565b60208152600082518060208401526116f18160408501602087016116ae565b601f01601f19169190910160400192915050565b60008083601f84011261171757600080fd5b5081356001600160401b0381111561172e57600080fd5b60208301915083602082850101111561174657600080fd5b9250929050565b60008060006040848603121561176257600080fd5b61176b84611677565b925060208401356001600160401b0381111561178657600080fd5b61179286828701611705565b9497909650939450505050565b6000602082840312156117b157600080fd5b5035919050565b600080604083850312156117cb57600080fd5b823591506117db60208401611677565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156118255783516001600160a01b031683529284019291840191600101611800565b50909695505050505050565b60008060008060006060868803121561184957600080fd5b61185286611677565b945060208601356001600160401b038082111561186e57600080fd5b61187a89838a01611705565b9096509450604088013591508082111561189357600080fd5b506118a088828901611705565b969995985093965092949392505050565b600080602083850312156118c457600080fd5b82356001600160401b038111156118da57600080fd5b6118e685828601611705565b90969095509350505050565b6000806040838503121561190557600080fd5b61190e83611677565b946020939093013593505050565b600181811c9082168061193057607f821691505b60208210810361195057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b601f82111561055d57600081815260208120601f850160051c810160208610156119935750805b601f850160051c820191505b818110156119b25782815560010161199f565b505050505050565b600019600383901b1c191660019190911b1790565b6001600160401b038311156119e6576119e6611956565b6119fa836119f4835461191c565b8361196c565b6000601f841160018114611a285760008515611a165750838201355b611a2086826119ba565b845550610eea565b600083815260209020601f19861690835b82811015611a595786850135825560209485019460019092019101611a39565b5086821015611a765760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8183823760009101908152919050565b60008251611aaa8184602087016116ae565b9190910192915050565b81516001600160401b03811115611acd57611acd611956565b611ae181611adb845461191c565b8461196c565b602080601f831160018114611b105760008415611afe5750858301515b611b0885826119ba565b8655506119b2565b600085815260208120601f198616915b82811015611b3f57888601518255948401946001909101908401611b20565b5085821015611b5d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082018082111561044157610441611b6d565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351611bc88160178501602088016116ae565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611bf98160288401602088016116ae565b01602801949350505050565b6000816000190483118215151615611c1f57611c1f611b6d565b500290565b634e487b7160e01b600052603260045260246000fd5b600081611c4957611c49611b6d565b50600019019056fe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a26469706673582212209c0969a2e541138027f7f309636a3ae9f0679dd7603f4b5561221bb49bbe7d2b64736f6c63430008100033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/graph/generated/CapTableRegistry/CapTable.ts b/packages/graph/generated/CapTableRegistry/CapTable.ts index dee89b5..583bbe1 100644 --- a/packages/graph/generated/CapTableRegistry/CapTable.ts +++ b/packages/graph/generated/CapTableRegistry/CapTable.ts @@ -114,32 +114,6 @@ export class AuthorizedOperatorByPartition__Params { } } -export class CaptableChangedFagsystem extends ethereum.Event { - get params(): CaptableChangedFagsystem__Params { - return new CaptableChangedFagsystem__Params(this); - } -} - -export class CaptableChangedFagsystem__Params { - _event: CaptableChangedFagsystem; - - constructor(event: CaptableChangedFagsystem) { - this._event = event; - } - - get orgnr(): Bytes { - return this._event.parameters[0].value.toBytes(); - } - - get oldFagsystem(): Address { - return this._event.parameters[1].value.toAddress(); - } - - get newFagsystem(): Address { - return this._event.parameters[2].value.toAddress(); - } -} - export class ChangedPartition extends ethereum.Event { get params(): ChangedPartition__Params { return new ChangedPartition__Params(this); @@ -1003,44 +977,6 @@ export class CapTable extends ethereum.SmartContract { ); } - getFagsystem(): Address { - let result = super.call("getFagsystem", "getFagsystem():(address)", []); - - return result[0].toAddress(); - } - - try_getFagsystem(): ethereum.CallResult
{ - let result = super.tryCall("getFagsystem", "getFagsystem():(address)", []); - if (result.reverted) { - return new ethereum.CallResult(); - } - let value = result.value; - return ethereum.CallResult.fromValue(value[0].toAddress()); - } - - getFagsystemDid(): string { - let result = super.call( - "getFagsystemDid", - "getFagsystemDid():(string)", - [] - ); - - return result[0].toString(); - } - - try_getFagsystemDid(): ethereum.CallResult { - let result = super.tryCall( - "getFagsystemDid", - "getFagsystemDid():(string)", - [] - ); - if (result.reverted) { - return new ethereum.CallResult(); - } - let value = result.value; - return ethereum.CallResult.fromValue(value[0].toString()); - } - getOrgnr(): string { let result = super.call("getOrgnr", "getOrgnr():(string)", []); @@ -1071,6 +1007,29 @@ export class CapTable extends ethereum.SmartContract { return ethereum.CallResult.fromValue(value[0].toBigInt()); } + isAddedToRegistry(): boolean { + let result = super.call( + "isAddedToRegistry", + "isAddedToRegistry():(bool)", + [] + ); + + return result[0].toBoolean(); + } + + try_isAddedToRegistry(): ethereum.CallResult { + let result = super.tryCall( + "isAddedToRegistry", + "isAddedToRegistry():(bool)", + [] + ); + if (result.reverted) { + return new ethereum.CallResult(); + } + let value = result.value; + return ethereum.CallResult.fromValue(value[0].toBoolean()); + } + isControllable(): boolean { let result = super.call("isControllable", "isControllable():(bool)", []); @@ -1507,10 +1466,6 @@ export class ConstructorCall__Inputs { get defaultPartitions(): Array { return this._call.inputValues[4].value.toBytesArray(); } - - get capTableRegistry(): Address { - return this._call.inputValues[5].value.toAddress(); - } } export class ConstructorCall__Outputs { @@ -1695,6 +1650,36 @@ export class AuthorizeOperatorByPartitionCall__Outputs { } } +export class ConfirmAddedToRegistryCall extends ethereum.Call { + get inputs(): ConfirmAddedToRegistryCall__Inputs { + return new ConfirmAddedToRegistryCall__Inputs(this); + } + + get outputs(): ConfirmAddedToRegistryCall__Outputs { + return new ConfirmAddedToRegistryCall__Outputs(this); + } +} + +export class ConfirmAddedToRegistryCall__Inputs { + _call: ConfirmAddedToRegistryCall; + + constructor(call: ConfirmAddedToRegistryCall) { + this._call = call; + } + + get registryAddress(): Address { + return this._call.inputValues[0].value.toAddress(); + } +} + +export class ConfirmAddedToRegistryCall__Outputs { + _call: ConfirmAddedToRegistryCall; + + constructor(call: ConfirmAddedToRegistryCall) { + this._call = call; + } +} + export class DomainSeparatorCall extends ethereum.Call { get inputs(): DomainSeparatorCall__Inputs { return new DomainSeparatorCall__Inputs(this); @@ -2361,36 +2346,6 @@ export class RevokeOperatorByPartitionCall__Outputs { } } -export class SetCapTableRegistryCall extends ethereum.Call { - get inputs(): SetCapTableRegistryCall__Inputs { - return new SetCapTableRegistryCall__Inputs(this); - } - - get outputs(): SetCapTableRegistryCall__Outputs { - return new SetCapTableRegistryCall__Outputs(this); - } -} - -export class SetCapTableRegistryCall__Inputs { - _call: SetCapTableRegistryCall; - - constructor(call: SetCapTableRegistryCall) { - this._call = call; - } - - get capTableRegistryAddress(): Address { - return this._call.inputValues[0].value.toAddress(); - } -} - -export class SetCapTableRegistryCall__Outputs { - _call: SetCapTableRegistryCall; - - constructor(call: SetCapTableRegistryCall) { - this._call = call; - } -} - export class SetControllersCall extends ethereum.Call { get inputs(): SetControllersCall__Inputs { return new SetControllersCall__Inputs(this); @@ -2892,29 +2847,3 @@ export class TransferWithDataCall__Outputs { this._call = call; } } - -export class UpdateFagsystemCall extends ethereum.Call { - get inputs(): UpdateFagsystemCall__Inputs { - return new UpdateFagsystemCall__Inputs(this); - } - - get outputs(): UpdateFagsystemCall__Outputs { - return new UpdateFagsystemCall__Outputs(this); - } -} - -export class UpdateFagsystemCall__Inputs { - _call: UpdateFagsystemCall; - - constructor(call: UpdateFagsystemCall) { - this._call = call; - } -} - -export class UpdateFagsystemCall__Outputs { - _call: UpdateFagsystemCall; - - constructor(call: UpdateFagsystemCall) { - this._call = call; - } -} diff --git a/packages/graph/generated/CapTableRegistry/CapTableRegistry.ts b/packages/graph/generated/CapTableRegistry/CapTableRegistry.ts index 5993ad9..10cb3b8 100644 --- a/packages/graph/generated/CapTableRegistry/CapTableRegistry.ts +++ b/packages/graph/generated/CapTableRegistry/CapTableRegistry.ts @@ -10,24 +10,6 @@ import { BigInt } from "@graphprotocol/graph-ts"; -export class AuthenticatedPerson extends ethereum.Event { - get params(): AuthenticatedPerson__Params { - return new AuthenticatedPerson__Params(this); - } -} - -export class AuthenticatedPerson__Params { - _event: AuthenticatedPerson; - - constructor(event: AuthenticatedPerson) { - this._event = event; - } - - get authenticatedAddress(): Address { - return this._event.parameters[0].value.toAddress(); - } -} - export class CapTableAdded extends ethereum.Event { get params(): CapTableAdded__Params { return new CapTableAdded__Params(this); @@ -72,50 +54,6 @@ export class CapTableRemoved__Params { } } -export class ContractRevoked extends ethereum.Event { - get params(): ContractRevoked__Params { - return new ContractRevoked__Params(this); - } -} - -export class ContractRevoked__Params { - _event: ContractRevoked; - - constructor(event: ContractRevoked) { - this._event = event; - } - - get contractAddress(): Address { - return this._event.parameters[0].value.toAddress(); - } - - get owner(): Address { - return this._event.parameters[1].value.toAddress(); - } -} - -export class PersonAuthenticatedContract extends ethereum.Event { - get params(): PersonAuthenticatedContract__Params { - return new PersonAuthenticatedContract__Params(this); - } -} - -export class PersonAuthenticatedContract__Params { - _event: PersonAuthenticatedContract; - - constructor(event: PersonAuthenticatedContract) { - this._event = event; - } - - get contractAddress(): Address { - return this._event.parameters[0].value.toAddress(); - } - - get owner(): Address { - return this._event.parameters[1].value.toAddress(); - } -} - export class RoleAdminChanged extends ethereum.Event { get params(): RoleAdminChanged__Params { return new RoleAdminChanged__Params(this); @@ -241,61 +179,6 @@ export class CapTableRegistry extends ethereum.SmartContract { return ethereum.CallResult.fromValue(value[0].toBytes()); } - checkAuthenticated(_address: Address, timeValid: BigInt): boolean { - let result = super.call( - "checkAuthenticated", - "checkAuthenticated(address,uint256):(bool)", - [ - ethereum.Value.fromAddress(_address), - ethereum.Value.fromUnsignedBigInt(timeValid) - ] - ); - - return result[0].toBoolean(); - } - - try_checkAuthenticated( - _address: Address, - timeValid: BigInt - ): ethereum.CallResult { - let result = super.tryCall( - "checkAuthenticated", - "checkAuthenticated(address,uint256):(bool)", - [ - ethereum.Value.fromAddress(_address), - ethereum.Value.fromUnsignedBigInt(timeValid) - ] - ); - if (result.reverted) { - return new ethereum.CallResult(); - } - let value = result.value; - return ethereum.CallResult.fromValue(value[0].toBoolean()); - } - - checkAuthenticatedOnce(_address: Address): boolean { - let result = super.call( - "checkAuthenticatedOnce", - "checkAuthenticatedOnce(address):(bool)", - [ethereum.Value.fromAddress(_address)] - ); - - return result[0].toBoolean(); - } - - try_checkAuthenticatedOnce(_address: Address): ethereum.CallResult { - let result = super.tryCall( - "checkAuthenticatedOnce", - "checkAuthenticatedOnce(address):(bool)", - [ethereum.Value.fromAddress(_address)] - ); - if (result.reverted) { - return new ethereum.CallResult(); - } - let value = result.value; - return ethereum.CallResult.fromValue(value[0].toBoolean()); - } - getActiveCapTablesCount(): BigInt { let result = super.call( "getActiveCapTablesCount", @@ -380,29 +263,6 @@ export class CapTableRegistry extends ethereum.SmartContract { return ethereum.CallResult.fromValue(value[0].toString()); } - getOperatorDID(adr: Address): string { - let result = super.call( - "getOperatorDID", - "getOperatorDID(address):(string)", - [ethereum.Value.fromAddress(adr)] - ); - - return result[0].toString(); - } - - try_getOperatorDID(adr: Address): ethereum.CallResult { - let result = super.tryCall( - "getOperatorDID", - "getOperatorDID(address):(string)", - [ethereum.Value.fromAddress(adr)] - ); - if (result.reverted) { - return new ethereum.CallResult(); - } - let value = result.value; - return ethereum.CallResult.fromValue(value[0].toString()); - } - getOperatorForCapTable(adr: Address): Address { let result = super.call( "getOperatorForCapTable", @@ -426,52 +286,6 @@ export class CapTableRegistry extends ethereum.SmartContract { return ethereum.CallResult.fromValue(value[0].toAddress()); } - getOperatorName(_operatorAddress: Address): string { - let result = super.call( - "getOperatorName", - "getOperatorName(address):(string)", - [ethereum.Value.fromAddress(_operatorAddress)] - ); - - return result[0].toString(); - } - - try_getOperatorName(_operatorAddress: Address): ethereum.CallResult { - let result = super.tryCall( - "getOperatorName", - "getOperatorName(address):(string)", - [ethereum.Value.fromAddress(_operatorAddress)] - ); - if (result.reverted) { - return new ethereum.CallResult(); - } - let value = result.value; - return ethereum.CallResult.fromValue(value[0].toString()); - } - - getOperatorOf(_address: Address): Address { - let result = super.call( - "getOperatorOf", - "getOperatorOf(address):(address)", - [ethereum.Value.fromAddress(_address)] - ); - - return result[0].toAddress(); - } - - try_getOperatorOf(_address: Address): ethereum.CallResult
{ - let result = super.tryCall( - "getOperatorOf", - "getOperatorOf(address):(address)", - [ethereum.Value.fromAddress(_address)] - ); - if (result.reverted) { - return new ethereum.CallResult(); - } - let value = result.value; - return ethereum.CallResult.fromValue(value[0].toAddress()); - } - getRoleAdmin(role: Bytes): Bytes { let result = super.call("getRoleAdmin", "getRoleAdmin(bytes32):(bytes32)", [ ethereum.Value.fromFixedBytes(role) @@ -617,142 +431,6 @@ export class AddCapTableCall__Outputs { } } -export class AuthenticateOperatorCall extends ethereum.Call { - get inputs(): AuthenticateOperatorCall__Inputs { - return new AuthenticateOperatorCall__Inputs(this); - } - - get outputs(): AuthenticateOperatorCall__Outputs { - return new AuthenticateOperatorCall__Outputs(this); - } -} - -export class AuthenticateOperatorCall__Inputs { - _call: AuthenticateOperatorCall; - - constructor(call: AuthenticateOperatorCall) { - this._call = call; - } - - get _operatorAddress(): Address { - return this._call.inputValues[0].value.toAddress(); - } - - get _operatorName(): string { - return this._call.inputValues[1].value.toString(); - } -} - -export class AuthenticateOperatorCall__Outputs { - _call: AuthenticateOperatorCall; - - constructor(call: AuthenticateOperatorCall) { - this._call = call; - } -} - -export class AuthenticateOperatorWithDIDCall extends ethereum.Call { - get inputs(): AuthenticateOperatorWithDIDCall__Inputs { - return new AuthenticateOperatorWithDIDCall__Inputs(this); - } - - get outputs(): AuthenticateOperatorWithDIDCall__Outputs { - return new AuthenticateOperatorWithDIDCall__Outputs(this); - } -} - -export class AuthenticateOperatorWithDIDCall__Inputs { - _call: AuthenticateOperatorWithDIDCall; - - constructor(call: AuthenticateOperatorWithDIDCall) { - this._call = call; - } - - get _operatorAddress(): Address { - return this._call.inputValues[0].value.toAddress(); - } - - get _operatorName(): string { - return this._call.inputValues[1].value.toString(); - } - - get _did(): string { - return this._call.inputValues[2].value.toString(); - } -} - -export class AuthenticateOperatorWithDIDCall__Outputs { - _call: AuthenticateOperatorWithDIDCall; - - constructor(call: AuthenticateOperatorWithDIDCall) { - this._call = call; - } -} - -export class ChangeAdminCall extends ethereum.Call { - get inputs(): ChangeAdminCall__Inputs { - return new ChangeAdminCall__Inputs(this); - } - - get outputs(): ChangeAdminCall__Outputs { - return new ChangeAdminCall__Outputs(this); - } -} - -export class ChangeAdminCall__Inputs { - _call: ChangeAdminCall; - - constructor(call: ChangeAdminCall) { - this._call = call; - } - - get newAdmin(): Address { - return this._call.inputValues[0].value.toAddress(); - } -} - -export class ChangeAdminCall__Outputs { - _call: ChangeAdminCall; - - constructor(call: ChangeAdminCall) { - this._call = call; - } -} - -export class ChangeOperatorNameCall extends ethereum.Call { - get inputs(): ChangeOperatorNameCall__Inputs { - return new ChangeOperatorNameCall__Inputs(this); - } - - get outputs(): ChangeOperatorNameCall__Outputs { - return new ChangeOperatorNameCall__Outputs(this); - } -} - -export class ChangeOperatorNameCall__Inputs { - _call: ChangeOperatorNameCall; - - constructor(call: ChangeOperatorNameCall) { - this._call = call; - } - - get _operatorAddress(): Address { - return this._call.inputValues[0].value.toAddress(); - } - - get _operatorName(): string { - return this._call.inputValues[1].value.toString(); - } -} - -export class ChangeOperatorNameCall__Outputs { - _call: ChangeOperatorNameCall; - - constructor(call: ChangeOperatorNameCall) { - this._call = call; - } -} - export class GrantRoleCall extends ethereum.Call { get inputs(): GrantRoleCall__Inputs { return new GrantRoleCall__Inputs(this); @@ -851,96 +529,6 @@ export class RenounceRoleCall__Outputs { } } -export class RevokeAuthenticationContractCall extends ethereum.Call { - get inputs(): RevokeAuthenticationContractCall__Inputs { - return new RevokeAuthenticationContractCall__Inputs(this); - } - - get outputs(): RevokeAuthenticationContractCall__Outputs { - return new RevokeAuthenticationContractCall__Outputs(this); - } -} - -export class RevokeAuthenticationContractCall__Inputs { - _call: RevokeAuthenticationContractCall; - - constructor(call: RevokeAuthenticationContractCall) { - this._call = call; - } - - get _address(): Address { - return this._call.inputValues[0].value.toAddress(); - } -} - -export class RevokeAuthenticationContractCall__Outputs { - _call: RevokeAuthenticationContractCall; - - constructor(call: RevokeAuthenticationContractCall) { - this._call = call; - } -} - -export class RevokeAuthenticationPersonCall extends ethereum.Call { - get inputs(): RevokeAuthenticationPersonCall__Inputs { - return new RevokeAuthenticationPersonCall__Inputs(this); - } - - get outputs(): RevokeAuthenticationPersonCall__Outputs { - return new RevokeAuthenticationPersonCall__Outputs(this); - } -} - -export class RevokeAuthenticationPersonCall__Inputs { - _call: RevokeAuthenticationPersonCall; - - constructor(call: RevokeAuthenticationPersonCall) { - this._call = call; - } - - get _address(): Address { - return this._call.inputValues[0].value.toAddress(); - } -} - -export class RevokeAuthenticationPersonCall__Outputs { - _call: RevokeAuthenticationPersonCall; - - constructor(call: RevokeAuthenticationPersonCall) { - this._call = call; - } -} - -export class RevokeOperatorCall extends ethereum.Call { - get inputs(): RevokeOperatorCall__Inputs { - return new RevokeOperatorCall__Inputs(this); - } - - get outputs(): RevokeOperatorCall__Outputs { - return new RevokeOperatorCall__Outputs(this); - } -} - -export class RevokeOperatorCall__Inputs { - _call: RevokeOperatorCall; - - constructor(call: RevokeOperatorCall) { - this._call = call; - } - - get operator(): Address { - return this._call.inputValues[0].value.toAddress(); - } -} - -export class RevokeOperatorCall__Outputs { - _call: RevokeOperatorCall; - - constructor(call: RevokeOperatorCall) { - this._call = call; - } -} - export class RevokeRoleCall extends ethereum.Call { get inputs(): RevokeRoleCall__Inputs { return new RevokeRoleCall__Inputs(this); @@ -974,63 +562,3 @@ export class RevokeRoleCall__Outputs { this._call = call; } } - -export class SetAuthenticatedContractCall extends ethereum.Call { - get inputs(): SetAuthenticatedContractCall__Inputs { - return new SetAuthenticatedContractCall__Inputs(this); - } - - get outputs(): SetAuthenticatedContractCall__Outputs { - return new SetAuthenticatedContractCall__Outputs(this); - } -} - -export class SetAuthenticatedContractCall__Inputs { - _call: SetAuthenticatedContractCall; - - constructor(call: SetAuthenticatedContractCall) { - this._call = call; - } - - get _address(): Address { - return this._call.inputValues[0].value.toAddress(); - } -} - -export class SetAuthenticatedContractCall__Outputs { - _call: SetAuthenticatedContractCall; - - constructor(call: SetAuthenticatedContractCall) { - this._call = call; - } -} - -export class SetAuthenticatedPersonCall extends ethereum.Call { - get inputs(): SetAuthenticatedPersonCall__Inputs { - return new SetAuthenticatedPersonCall__Inputs(this); - } - - get outputs(): SetAuthenticatedPersonCall__Outputs { - return new SetAuthenticatedPersonCall__Outputs(this); - } -} - -export class SetAuthenticatedPersonCall__Inputs { - _call: SetAuthenticatedPersonCall; - - constructor(call: SetAuthenticatedPersonCall) { - this._call = call; - } - - get _address(): Address { - return this._call.inputValues[0].value.toAddress(); - } -} - -export class SetAuthenticatedPersonCall__Outputs { - _call: SetAuthenticatedPersonCall; - - constructor(call: SetAuthenticatedPersonCall) { - this._call = call; - } -} diff --git a/packages/graph/generated/templates/CapTable/CapTable.ts b/packages/graph/generated/templates/CapTable/CapTable.ts index dee89b5..583bbe1 100644 --- a/packages/graph/generated/templates/CapTable/CapTable.ts +++ b/packages/graph/generated/templates/CapTable/CapTable.ts @@ -114,32 +114,6 @@ export class AuthorizedOperatorByPartition__Params { } } -export class CaptableChangedFagsystem extends ethereum.Event { - get params(): CaptableChangedFagsystem__Params { - return new CaptableChangedFagsystem__Params(this); - } -} - -export class CaptableChangedFagsystem__Params { - _event: CaptableChangedFagsystem; - - constructor(event: CaptableChangedFagsystem) { - this._event = event; - } - - get orgnr(): Bytes { - return this._event.parameters[0].value.toBytes(); - } - - get oldFagsystem(): Address { - return this._event.parameters[1].value.toAddress(); - } - - get newFagsystem(): Address { - return this._event.parameters[2].value.toAddress(); - } -} - export class ChangedPartition extends ethereum.Event { get params(): ChangedPartition__Params { return new ChangedPartition__Params(this); @@ -1003,44 +977,6 @@ export class CapTable extends ethereum.SmartContract { ); } - getFagsystem(): Address { - let result = super.call("getFagsystem", "getFagsystem():(address)", []); - - return result[0].toAddress(); - } - - try_getFagsystem(): ethereum.CallResult
{ - let result = super.tryCall("getFagsystem", "getFagsystem():(address)", []); - if (result.reverted) { - return new ethereum.CallResult(); - } - let value = result.value; - return ethereum.CallResult.fromValue(value[0].toAddress()); - } - - getFagsystemDid(): string { - let result = super.call( - "getFagsystemDid", - "getFagsystemDid():(string)", - [] - ); - - return result[0].toString(); - } - - try_getFagsystemDid(): ethereum.CallResult { - let result = super.tryCall( - "getFagsystemDid", - "getFagsystemDid():(string)", - [] - ); - if (result.reverted) { - return new ethereum.CallResult(); - } - let value = result.value; - return ethereum.CallResult.fromValue(value[0].toString()); - } - getOrgnr(): string { let result = super.call("getOrgnr", "getOrgnr():(string)", []); @@ -1071,6 +1007,29 @@ export class CapTable extends ethereum.SmartContract { return ethereum.CallResult.fromValue(value[0].toBigInt()); } + isAddedToRegistry(): boolean { + let result = super.call( + "isAddedToRegistry", + "isAddedToRegistry():(bool)", + [] + ); + + return result[0].toBoolean(); + } + + try_isAddedToRegistry(): ethereum.CallResult { + let result = super.tryCall( + "isAddedToRegistry", + "isAddedToRegistry():(bool)", + [] + ); + if (result.reverted) { + return new ethereum.CallResult(); + } + let value = result.value; + return ethereum.CallResult.fromValue(value[0].toBoolean()); + } + isControllable(): boolean { let result = super.call("isControllable", "isControllable():(bool)", []); @@ -1507,10 +1466,6 @@ export class ConstructorCall__Inputs { get defaultPartitions(): Array { return this._call.inputValues[4].value.toBytesArray(); } - - get capTableRegistry(): Address { - return this._call.inputValues[5].value.toAddress(); - } } export class ConstructorCall__Outputs { @@ -1695,6 +1650,36 @@ export class AuthorizeOperatorByPartitionCall__Outputs { } } +export class ConfirmAddedToRegistryCall extends ethereum.Call { + get inputs(): ConfirmAddedToRegistryCall__Inputs { + return new ConfirmAddedToRegistryCall__Inputs(this); + } + + get outputs(): ConfirmAddedToRegistryCall__Outputs { + return new ConfirmAddedToRegistryCall__Outputs(this); + } +} + +export class ConfirmAddedToRegistryCall__Inputs { + _call: ConfirmAddedToRegistryCall; + + constructor(call: ConfirmAddedToRegistryCall) { + this._call = call; + } + + get registryAddress(): Address { + return this._call.inputValues[0].value.toAddress(); + } +} + +export class ConfirmAddedToRegistryCall__Outputs { + _call: ConfirmAddedToRegistryCall; + + constructor(call: ConfirmAddedToRegistryCall) { + this._call = call; + } +} + export class DomainSeparatorCall extends ethereum.Call { get inputs(): DomainSeparatorCall__Inputs { return new DomainSeparatorCall__Inputs(this); @@ -2361,36 +2346,6 @@ export class RevokeOperatorByPartitionCall__Outputs { } } -export class SetCapTableRegistryCall extends ethereum.Call { - get inputs(): SetCapTableRegistryCall__Inputs { - return new SetCapTableRegistryCall__Inputs(this); - } - - get outputs(): SetCapTableRegistryCall__Outputs { - return new SetCapTableRegistryCall__Outputs(this); - } -} - -export class SetCapTableRegistryCall__Inputs { - _call: SetCapTableRegistryCall; - - constructor(call: SetCapTableRegistryCall) { - this._call = call; - } - - get capTableRegistryAddress(): Address { - return this._call.inputValues[0].value.toAddress(); - } -} - -export class SetCapTableRegistryCall__Outputs { - _call: SetCapTableRegistryCall; - - constructor(call: SetCapTableRegistryCall) { - this._call = call; - } -} - export class SetControllersCall extends ethereum.Call { get inputs(): SetControllersCall__Inputs { return new SetControllersCall__Inputs(this); @@ -2892,29 +2847,3 @@ export class TransferWithDataCall__Outputs { this._call = call; } } - -export class UpdateFagsystemCall extends ethereum.Call { - get inputs(): UpdateFagsystemCall__Inputs { - return new UpdateFagsystemCall__Inputs(this); - } - - get outputs(): UpdateFagsystemCall__Outputs { - return new UpdateFagsystemCall__Outputs(this); - } -} - -export class UpdateFagsystemCall__Inputs { - _call: UpdateFagsystemCall; - - constructor(call: UpdateFagsystemCall) { - this._call = call; - } -} - -export class UpdateFagsystemCall__Outputs { - _call: UpdateFagsystemCall; - - constructor(call: UpdateFagsystemCall) { - this._call = call; - } -} diff --git a/packages/graph/package.json b/packages/graph/package.json index 00bb0d6..e101719 100644 --- a/packages/graph/package.json +++ b/packages/graph/package.json @@ -10,12 +10,12 @@ "create:container": "graph create --node http://graph-node:8020/ brok/captable", "remove:container": "graph remove --node http://graph-node:8020/ brok/captable", "deploy:container": "graph deploy --node http://graph-node:8020/ --ipfs http://ipfs:5001 --version-label 0.0.1 brok/captable", - "prepare:brokDev": "node scripts/prepare.js brokDev", - "prepare:brokStage": "node scripts/prepare.js brokStage", - "prepare:localhost": "node scripts/prepare.js localhost", - "prepare:brokProd": "node scripts/prepare.js brokProd", - "deploy:localhost": "pnpm prepare:localhost && pnpm build && pnpm create:local && pnpm deploy:local", - "deploy:container-compose": "pnpm prepare:localhost && pnpm build && pnpm create:container && pnpm deploy:container", + "prepare:brokDev": "node scripts/prepare.js brokDev && pnpm build", + "prepare:brokStage": "node scripts/prepare.js brokStage && pnpm build", + "prepare:localhost": "node scripts/prepare.js localhost && pnpm build", + "prepare:brokProd": "node scripts/prepare.js brokProd && pnpm build", + "deploy:localhost": "pnpm prepare:localhost && pnpm create:local && pnpm deploy:local", + "deploy:container-compose": "pnpm prepare:localhost && pnpm create:container && pnpm deploy:container", "deploy:brokDev": "pnpm prepare:brokDev && pnpm graph deploy --product hosted-service ohatland/brok_dev_13", "deploy:brokStage": "pnpm prepare:brokStage && pnpm graph deploy --product hosted-service ohatland/brok-ppe-v4", "deploy:brokProd": "pnpm prepare:brokProd && pnpm graph deploy --product hosted-service ohatland/brok-prd-v5" diff --git a/packages/graph/subgraph.example.yaml b/packages/graph/subgraph.example.yaml index bf9f5ca..2a92f59 100644 --- a/packages/graph/subgraph.example.yaml +++ b/packages/graph/subgraph.example.yaml @@ -20,9 +20,9 @@ dataSources: - CapTableRegistry abis: - name: CapTableRegistry - file: ./abis/CapTableRegistry.json + file: ./../captable/artifacts/contracts/capTable/CapTableRegistry.sol/CapTableRegistry.json - name: CapTable - file: ./abis/CapTable.json + file: ./../captable/artifacts/contracts/capTable/CapTable.sol/CapTable.json eventHandlers: - event: CapTableAdded(indexed address,indexed string) handler: handleCapTableAdded @@ -46,7 +46,7 @@ templates: - TokenBalance abis: - name: CapTable - file: ./abis/CapTable.json + file: ./../captable/artifacts/contracts/capTable/CapTable.sol/CapTable.json eventHandlers: - event: >- TransferByPartition(indexed bytes32,address,indexed address,indexed diff --git a/packages/graph/subgraph.yaml b/packages/graph/subgraph.yaml deleted file mode 100644 index 4e61a4a..0000000 --- a/packages/graph/subgraph.yaml +++ /dev/null @@ -1,60 +0,0 @@ -specVersion: 0.0.4 -description: Captable for The Norwegian Business Registry. -repository: https://github.com/BROKLab/captable-graph -schema: - file: ./schema.graphql -dataSources: - - kind: ethereum/contract - name: CapTableRegistry - network: arbitrum-one - source: - address: '0x97c14180eAb33ce174a4171f57ac3b558D6Abb71' - abi: CapTableRegistry - startBlock: 142000000 - mapping: - kind: ethereum/events - apiVersion: 0.0.6 - language: wasm/assemblyscript - file: ./src/capTableRegistry.ts - entities: - - CapTableRegistry - abis: - - name: CapTableRegistry - file: ./abis/CapTableRegistry.json - - name: CapTable - file: ./abis/CapTable.json - eventHandlers: - - event: CapTableAdded(indexed address,indexed string) - handler: handleCapTableAdded - - event: CapTableRemoved(indexed address,indexed string) - handler: handleCapTableRemoved -templates: - - name: CapTable - kind: ethereum/contract - network: arbitrum-one - source: - abi: CapTable - mapping: - kind: ethereum/events - apiVersion: 0.0.6 - language: wasm/assemblyscript - file: ./src/captable.ts - entities: - - CapTable - - TokenBalance - abis: - - name: CapTable - file: ./abis/CapTable.json - eventHandlers: - - event: >- - TransferByPartition(indexed bytes32,address,indexed address,indexed - address,uint256,bytes,bytes) - handler: handleTransferByPartition - - event: >- - IssuedByPartition(indexed bytes32,indexed address,indexed - address,uint256,bytes,bytes) - handler: handleIssuedByPartition - - event: >- - RedeemedByPartition(indexed bytes32,indexed address,indexed - address,uint256,bytes) - handler: handleRedeemByPartition