diff --git a/.env.example b/.env.example deleted file mode 100644 index 5901920..0000000 --- a/.env.example +++ /dev/null @@ -1,16 +0,0 @@ -# Deployment configuration -RPC_URL="" -PRIVATE_KEY=0x - -# DAO Contracts -PCCS_STORAGE= -ENCLAVE_ID_DAO= -FMSPC_TCB_DAO= -PCK_DAO= -PCS_DAO= - -# On-Chain PCCS Helper Contracts -ENCLAVE_IDENTITY_HELPER= -FMSPC_TCB_HELPER= -X509_CRL_HELPER= -X509_HELPER= \ No newline at end of file diff --git a/.github/workflows/slither.yml b/.github/workflows/slither.yml index 72e9875..afb65cf 100644 --- a/.github/workflows/slither.yml +++ b/.github/workflows/slither.yml @@ -27,16 +27,21 @@ jobs: with: fail-on: none slither-args: --checklist --show-ignored-findings --markdown-root ${{ env.commit_url }} - + sarif: results.sarif - - name: Create/update checklist as PR comment - uses: actions/github-script@v7 - if: github.event_name == 'pull_request' - env: - REPORT: ${{ steps.slither.outputs.stdout }} + - name: Upload SARIF file + uses: github/codeql-action/upload-sarif@v3 with: - script: | - const script = require('.github/scripts/slither-comment') - const header = '# Slither report' - const body = process.env.REPORT - await script({ github, context, header, body }) \ No newline at end of file + sarif_file: ${{ steps.slither.outputs.sarif }} + + # - name: Create/update checklist as PR comment + # uses: actions/github-script@v7 + # if: github.event_name == 'pull_request' + # env: + # REPORT: ${{ steps.slither.outputs.stdout }} + # with: + # script: | + # const script = require('.github/scripts/slither-comment') + # const header = '# Slither report' + # const body = process.env.REPORT + # await script({ github, context, header, body }) \ No newline at end of file diff --git a/README.md b/README.md index d54908e..2a4d070 100644 --- a/README.md +++ b/README.md @@ -19,40 +19,26 @@ On-chain PCCS provides an open and permissionless service where users can freely ## Contracts +> ℹ️ **Note**: +> +> The deployment addresses shown here are currently based on the latest [changes](https://github.com/automata-network/automata-on-chain-pccs/pull/9) made. +> +> To view deployments on the previous version (will be deprecated soon), you may refer to this [branch](https://github.com/automata-network/automata-on-chain-pccs/tree/v0). + There are two sets of contracts, i.e. the **Helper** and **Base**. ### Helper Contracts The Helper contracts provide APIs for parsing collaterals and converting into Solidity structs, i.e. QEIdentity.json, TCBInfo.json, basic DER-decoder for PCK X509 leaf certificate and extensions and X509 CRLs. - - -The Helper contracts have been deployed to testnet, and can be used by both on-chain and off-chain programs. - #### Testnet | | Network | Address | | --- | --- | --- | -| `EnclaveIdentityHelper.sol` | Automata Testnet | [0xfd4a34b578B352FE1896CDafaEb0f45f993352Bf](https://explorer-testnet.ata.network/address/0xfd4a34b578B352FE1896CDafaEb0f45f993352Bf) | -| | Ethereum Holesky Testnet | [0xEea41Ae0cB09A478b80425Ae61c85e445E83c415](https://holesky.etherscan.io/address/0xEea41Ae0cB09A478b80425Ae61c85e445E83c415) | -| | Ethereum Sepolia Testnet | [0xA5D1EC1CcCdF2f60Df05cf1e110352F696bA4C64](https://Sepolia.etherscan.io/address/0xA5D1EC1CcCdF2f60Df05cf1e110352F696bA4C64) | -| `FmspcTcbHelper.sol` | Automata Testnet | [0xC2A662e08A35513596E22D0aC236Ce72e59125EE](https://explorer-testnet.ata.network/address/0xC2A662e08A35513596E22D0aC236Ce72e59125EE) | -| | Ethereum Holesky Testnet | [0xc728DD0FcD76CD9166F66e1CD8002dE86d6525B8](https://holesky.etherscan.io/address/0xc728DD0FcD76CD9166F66e1CD8002dE86d6525B8) | -| | Ethereum Sepolia Testnet | [0x2404DAc28D18847937CcAdC1b29d3403AED3BB6C](https://Sepolia.etherscan.io/address/0x2404DAc28D18847937CcAdC1b29d3403AED3BB6C) | -| `PCKHelper.sol` | Automata Testnet | [0x5213c0e3Ab478dbc83E8afFF8909717332E4f8E1](https://explorer-testnet.ata.network/address/0x5213c0e3Ab478dbc83E8afFF8909717332E4f8E1) | -| | Ethereum Holesky Testnet | [0xDe20629a87C371668bB371ef1d77D9D167E52021](https://holesky.etherscan.io/address/0xDe20629a87C371668bB371ef1d77D9D167E52021) | -| | Ethereum Sepolia Testnet | [0xBf1ec53BA4768D1470F037898C6a3ff9Ed3Fe394](https://Sepolia.etherscan.io/address/0xBf1ec53BA4768D1470F037898C6a3ff9Ed3Fe394) | -| `X509CRLHelper.sol` | Automata Testnet | [0x12C1E13Aa2a238EAb15c2e2b6AC670266bc3C814](https://explorer-testnet.ata.network/address/0x12C1E13Aa2a238EAb15c2e2b6AC670266bc3C814) | -| | Ethereum Holesky Testnet | [0x3ACBfad7460e2fae32A31f863e1A38F7a002cEA8](https://holesky.etherscan.io/address/0x3ACBfad7460e2fae32A31f863e1A38F7a002cEA8) | -| | Ethereum Sepolia Testnet | [0x2a81585F6d8ACB52DED417De5946486394b54B63](https://Sepolia.etherscan.io/address/0x2a81585F6d8ACB52DED417De5946486394b54B63) | - -#### Mainnet -| | Network | Address | -| --- | --- | --- | -| `EnclaveIdentityHelper.sol` | Automata Mainnet | [0x13BECaa512713Ac7C2d7a04ba221aD5E02D43DFE](https://explorer.ata.network/address/0x13BECaa512713Ac7C2d7a04ba221aD5E02D43DFE) | -| `FmspcTcbHelper.sol` | Automata Mainnet | [0xc99bf04c31bf3d026b5b47b2574fc19c1459b732](https://explorer.ata.network/address/0xc99bf04c31bf3d026b5b47b2574fc19c1459b732) | -| `PCKHelper.sol` | Automata Mainnet | [0x3e2fe733E444313A93Fa3f9AEd3bB203048dDE70](https://explorer.ata.network/address/0x3e2fe733E444313A93Fa3f9AEd3bB203048dDE70) | -| `X509CRLHelper.sol` | Automata Mainnet | [0x2567245dE6E349C8B7AA82fD6FF854b844A0aEF9](https://explorer.ata.network/address/0x2567245dE6E349C8B7AA82fD6FF854b844A0aEF9) | +| `EnclaveIdentityHelper.sol` | Automata Testnet | [0xae27D762EED6958bc34b358bd7C78c7211fe77F8](https://explorer-testnet.ata.network/address/0xae27D762EED6958bc34b358bd7C78c7211fe77F8) | +| `FmspcTcbHelper.sol` | Automata Testnet | [0x71056B540b4E60D0E8eFb55FAd487C486B09FFF5](https://explorer-testnet.ata.network/address/0x71056B540b4E60D0E8eFb55FAd487C486B09FFF5) | +| `PCKHelper.sol` | Automata Testnet | [0x4Aca9C0EB063401C9F5c2Fc4487DBC5ccF1C9E2B](https://explorer-testnet.ata.network/address/0x4Aca9C0EB063401C9F5c2Fc4487DBC5ccF1C9E2B) | +| `X509CRLHelper.sol` | Automata Testnet | [0x6e204fEAe40F668a06E78a83b66185FFC8892DDA](https://explorer-testnet.ata.network/address/0x6e204fEAe40F668a06E78a83b66185FFC8892DDA) | ### Base libraries and Automata DAO contracts @@ -60,35 +46,16 @@ The base contracts are libraries that provide the Data Access Object (DAO) APIs Base contracts are dependent on Helper contracts to parse collaterals, and contains implementation of basic collateral authenticity check functions for upserts. Smart contract developers are encouraged to extend the base contracts to build their own custom implementation of on-chain PCCS. - - -Our DAO implementation can be found in the [`automata_pccs`](./src/automata_pccs/) directory, and are deployed to testnet. +Our DAO implementation can be found in the [`automata_pccs`](./src/automata_pccs/) directory. #### Testnet | | Network | Address | | --- | --- | --- | | `AutomataEnclaveIdentityDao.sol` | Automata Testnet | [0x413272890ab9F155a47A5F90a404Fb51aa259087](https://explorer-testnet.ata.network/address/0x413272890ab9F155a47A5F90a404Fb51aa259087) | -| | Ethereum Holesky Testnet | [0x9f4b0fB3A95072bD133082e9683A3536669EFE07](https://holesky.etherscan.io/address/0x9f4b0fB3A95072bD133082e9683A3536669EFE07) | -| | Ethereum Sepolia Testnet | [0x4bb680A5e6Ad6228E7d334903B0Ce10EF60c961C](https://Sepolia.etherscan.io/address/0x4bb680A5e6Ad6228E7d334903B0Ce10EF60c961C) | -| `AutomataFmspcTcbDao.sol` | Automata Testnet | [0x7c04B466DebA13D48116b1339C62b35B9805E5A0](https://explorer-testnet.ata.network/address/0x7c04B466DebA13D48116b1339C62b35B9805E5A0) | -| | Ethereum Holesky Testnet | [0xaB5074445E5ae3C650553d5a7560B3A7121635B9](https://holesky.etherscan.io/address/0xaB5074445E5ae3C650553d5a7560B3A7121635B9) | -| | Ethereum Sepolia Testnet | [0xF790b1C23e6508A6135Ce88450eC0A59Af0B9896](https://Sepolia.etherscan.io/address/0xF790b1C23e6508A6135Ce88450eC0A59Af0B9896) | -| `AutomataPckDao.sol` | Automata Testnet | [0x6D4cA6AE5315EBBcb4331c82531db0ad8853Eb31](https://explorer-testnet.ata.network/address/0x6D4cA6AE5315EBBcb4331c82531db0ad8853Eb31) | -| | Ethereum Holesky Testnet | [0x5B2d7781E3c44966769484daBCdc435EFD281c34](https://holesky.etherscan.io/address/0x5B2d7781E3c44966769484daBCdc435EFD281c34) | -| | Ethereum Sepolia Testnet | [0x3eA9D905Cb79586C2184f329e6a651D97F2ebee3](https://Sepolia.etherscan.io/address/0x3eA9D905Cb79586C2184f329e6a651D97F2ebee3) | -| `AutomataPcsDao.sol` | Automata Testnet | [0xD0335cbC73CA2f8EDd98a2BE3909f55642F414D7](https://explorer-testnet.ata.network/address/0xD0335cbC73CA2f8EDd98a2BE3909f55642F414D7) | -| | Ethereum Holesky Testnet | [0x66FdB4E72d2F4a7e2081bf83F1FfACC9bbCb384b](https://holesky.etherscan.io/address/0x66FdB4E72d2F4a7e2081bf83F1FfACC9bbCb384b) | -| | Ethereum Sepolia Testnet | [0x348DA46aA11188f641f01dbe247b25FFA5FFB9c4](https://Sepolia.etherscan.io/address/0x348DA46aA11188f641f01dbe247b25FFA5FFB9c4) | - -### Mainnet - -| | Network | Address | -| --- | --- | --- | -| `AutomataEnclaveIdentityDao.sol` | Automata Mainnet | [0x28111536292b34f37120861A46B39BF39187d73a](https://explorer.ata.network/address/0x28111536292b34f37120861A46B39BF39187d73a) | -| `AutomataFmspcTcbDao.sol` | Automata Mainnet | [0x868c18869f68E0E0b0b7B2B4439f7fDDd0421e6b](https://explorer.ata.network/address/0x868c18869f68E0E0b0b7B2B4439f7fDDd0421e6b) | -| `AutomataPckDao.sol` | Automata Mainnet | [0xeCc198936FcA3Ca1fDc97B8612B32185908917B0](https://explorer.ata.network/address/0xeCc198936FcA3Ca1fDc97B8612B32185908917B0) | -| `AutomataPcsDao.sol` | Automata Mainnet | [0x86f8865bce8be62cb8096b5b94fa3fb3a6ed330c](https://explorer.ata.network/address/0x86f8865bce8be62cb8096b5b94fa3fb3a6ed330c) | +| `AutomataFmspcTcbDao.sol` | Automata Testnet | [0x9c54C72867b07caF2e6255CE32983c28aFE40F26](https://explorer-testnet.ata.network/address/0x9c54C72867b07caF2e6255CE32983c28aFE40F26) | +| `AutomataPckDao.sol` | Automata Testnet | [0x722525B96b62e182F8A095af0a79d4EA2037795C](https://explorer-testnet.ata.network/address/0x722525B96b62e182F8A095af0a79d4EA2037795C) | +| `AutomataPcsDao.sol` | Automata Testnet | [0xcf171ACd6c0a776f9d3E1F6Cac8067c982Ac6Ce1](https://explorer-testnet.ata.network/address/0xcf171ACd6c0a776f9d3E1F6Cac8067c982Ac6Ce1) | --- @@ -99,7 +66,7 @@ Our DAO implementation can be found in the [`automata_pccs`](./src/automata_pccs - Create `.env` file with the provided example. ```bash -cp .env.example .env +cp env/.{network}.env.example .env ``` - Compile the contracts diff --git a/broadcast/ConfigAutomataDao.s.sol/1398243/setAuthorizedCaller-latest.json b/broadcast/ConfigAutomataDao.s.sol/1398243/setAuthorizedCaller-latest.json new file mode 100644 index 0000000..8776e01 --- /dev/null +++ b/broadcast/ConfigAutomataDao.s.sol/1398243/setAuthorizedCaller-latest.json @@ -0,0 +1,56 @@ +{ + "transactions": [ + { + "hash": "0x3ede64d6560753dd5a88642b689b236c12795ab2cf0b9e65f05323c2c16cdede", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x2bbc0ccc218e63ad4d2bbb7bde1375b092fd38a2", + "function": "setCallerAuthorization(address,bool)", + "arguments": [ + "0x3095741175094128ae9F451fa3693B2d23719940", + "true" + ], + "transaction": { + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", + "to": "0x2bbc0ccc218e63ad4d2bbb7bde1375b092fd38a2", + "gas": "0x107fc", + "value": "0x0", + "input": "0x48213a560000000000000000000000003095741175094128ae9f451fa3693b2d237199400000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xa", + "chainId": "0x1555e3" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x15fc3", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x3ede64d6560753dd5a88642b689b236c12795ab2cf0b9e65f05323c2c16cdede", + "transactionIndex": "0x1", + "blockHash": "0xc99108b148b730d007db3f81c04f69f700d78ed76a7734f7a0b5cf3b84586d8e", + "blockNumber": "0x63a23b", + "gasUsed": "0xb481", + "effectiveGasPrice": "0xfd", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", + "to": "0x2bbc0ccc218e63ad4d2bbb7bde1375b092fd38a2", + "contractAddress": null, + "l1BaseFeeScalar": "0x558", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xc5fc5", + "l1Fee": "0x1ee2b3a3", + "l1GasPrice": "0xe1c584a", + "l1GasUsed": "0x640" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1731925082, + "chain": 1398243, + "commit": "1cc539f" +} \ No newline at end of file diff --git a/broadcast/ConfigAutomataDao.s.sol/1398243/updateStorageDao-latest.json b/broadcast/ConfigAutomataDao.s.sol/1398243/updateStorageDao-latest.json index 5576683..03ea384 100644 --- a/broadcast/ConfigAutomataDao.s.sol/1398243/updateStorageDao-latest.json +++ b/broadcast/ConfigAutomataDao.s.sol/1398243/updateStorageDao-latest.json @@ -1,24 +1,24 @@ { "transactions": [ { - "hash": "0x51d73c521d7b3d90f1468ef5d2f5675b8bf667a8903ff87f058aa2c062eba794", + "hash": "0xb5c2c0dcb6c55039c22bcfa9374db5ac1b8ea9d9751e45cae0359a4ed206c213", "transactionType": "CALL", "contractName": null, - "contractAddress": "0xe8599dd2366230b7efdd526985c64c7325b27569", + "contractAddress": "0x2bbc0ccc218e63ad4d2bbb7bde1375b092fd38a2", "function": "updateDao(address,address,address,address)", "arguments": [ - "0xD0335cbC73CA2f8EDd98a2BE3909f55642F414D7", - "0x6D4cA6AE5315EBBcb4331c82531db0ad8853Eb31", - "0x7c04B466DebA13D48116b1339C62b35B9805E5A0", - "0x413272890ab9F155a47A5F90a404Fb51aa259087" + "0xcf171ACd6c0a776f9d3E1F6Cac8067c982Ac6Ce1", + "0x722525B96b62e182F8A095af0a79d4EA2037795C", + "0x9c54C72867b07caF2e6255CE32983c28aFE40F26", + "0x45f91C0d9Cf651785d93fcF7e9E97dE952CdB910" ], "transaction": { - "from": "0x3d089c2f2cb86d4efde153c81cabd4579784430b", - "to": "0xe8599dd2366230b7efdd526985c64c7325b27569", - "gas": "0xc34e", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", + "to": "0x2bbc0ccc218e63ad4d2bbb7bde1375b092fd38a2", + "gas": "0x123b0", "value": "0x0", - "input": "0x40070f2d000000000000000000000000d0335cbc73ca2f8edd98a2be3909f55642f414d70000000000000000000000006d4ca6ae5315ebbcb4331c82531db0ad8853eb310000000000000000000000007c04b466deba13d48116b1339c62b35b9805e5a0000000000000000000000000413272890ab9f155a47a5f90a404fb51aa259087", - "nonce": "0x13a", + "input": "0x40070f2d000000000000000000000000cf171acd6c0a776f9d3e1f6cac8067c982ac6ce1000000000000000000000000722525b96b62e182f8a095af0a79d4ea2037795c0000000000000000000000009c54c72867b07caf2e6255ce32983c28afe40f2600000000000000000000000045f91c0d9cf651785d93fcf7e9e97de952cdb910", + "nonce": "0xc", "chainId": "0x1555e3" }, "additionalContracts": [], @@ -28,31 +28,31 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x130e5", + "cumulativeGasUsed": "0x17e88", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x51d73c521d7b3d90f1468ef5d2f5675b8bf667a8903ff87f058aa2c062eba794", + "transactionHash": "0xb5c2c0dcb6c55039c22bcfa9374db5ac1b8ea9d9751e45cae0359a4ed206c213", "transactionIndex": "0x1", - "blockHash": "0x3e1771a648b9c31bf53ef0621e6d82b0d89cbd56eeb006e784b7e3a45e74bf18", - "blockNumber": "0x11c9dc", - "gasUsed": "0x858b", + "blockHash": "0xf05688bd67ec1ee30cb0b2ab11c5a9f664909cc483153f08c50bd0dc2f157254", + "blockNumber": "0x63b115", + "gasUsed": "0xd32e", "effectiveGasPrice": "0xfd", - "from": "0x3d089c2f2cb86d4efde153c81cabd4579784430b", - "to": "0xe8599dd2366230b7efdd526985c64c7325b27569", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", + "to": "0x2bbc0ccc218e63ad4d2bbb7bde1375b092fd38a2", "contractAddress": null, "l1BaseFeeScalar": "0x558", - "l1BlobBaseFee": "0x4", + "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xc5fc5", - "l1Fee": "0x33f41e52f", - "l1GasPrice": "0x10e18d2ef", - "l1GasUsed": "0x8c9" + "l1Fee": "0x3295d6b8c", + "l1GasPrice": "0x10a267954", + "l1GasUsed": "0x8ae" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1721197467, + "timestamp": 1731932686, "chain": 1398243, - "commit": "0a06458" + "commit": "9884122" } \ No newline at end of file diff --git a/broadcast/DeployAutomataDao.s.sol/1398243/deployAll-latest.json b/broadcast/DeployAutomataDao.s.sol/1398243/deployAll-latest.json index bf4f494..ff25500 100644 --- a/broadcast/DeployAutomataDao.s.sol/1398243/deployAll-latest.json +++ b/broadcast/DeployAutomataDao.s.sol/1398243/deployAll-latest.json @@ -1,133 +1,137 @@ { "transactions": [ { - "hash": "0xb53857212f1f83c0e66cc9961f62576c571b643bf4dd9e30b9b1c763813b5ce6", + "hash": "0x96397c3b9fe8c02c1d2b7f08e26e018c9d05b3376c61a7b2a31afab8e28def7f", "transactionType": "CREATE", "contractName": "AutomataDaoStorage", - "contractAddress": "0xbdaf40fbfea4596f129bd11d273c3eb64d3b4c62", + "contractAddress": "0x2bbc0ccc218e63ad4d2bbb7bde1375b092fd38a2", "function": null, "arguments": null, "transaction": { - "from": "0xdc3bda6d40f0e33e0dfa4aef9604b66195e6c5dc", - "gas": "0xe8ee8", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", + "gas": "0x1b022d", "value": "0x0", - "input": "0x608080604052346100455733638b78c6d819553360007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3610be5908161004b8239f35b600080fdfe608060408181526004918236101561001657600080fd5b600092833560e01c91826303f2c7da146108b357508163256929621461084a5781633a91c226146105e257816340070f2d146104f757816354d1f13d14610493578163715018a6146104145783826386911cde14610376575081638da5cb5b14610304578163aad8a0e71461027c578163f04e283e146101b3578163f2fde38b146100ff575063fee81cf4146100ab57600080fd5b346100fb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fb576020916100e5610a80565b9063389a75e1600c525281600c20549051908152f35b5080fd5b839060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fb57610133610a80565b9061013c610b77565b8160601b156101a8575073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b8360207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610279576101e6610a80565b6101ee610b77565b63389a75e1600c528082526020600c20928354421161026e57508173ffffffffffffffffffffffffffffffffffffffff929355167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188352601cfd5b80fd5b5050346100fb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fb5773ffffffffffffffffffffffffffffffffffffffff6102ca610a80565b6102d2610b77565b1682528160205281207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905580f35b5050346100fb57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fb5760209073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754915191168152f35b929150346104105760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261041057338352826020526103be60ff8385205416610afb565b358252600160205281206103d28154610aa8565b806103db575050f35b82601f82116001146103ed5750505580f35b909180825261040b601f60208420940160051c840160018501610b60565b555580f35b5050fd5b83807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027957610446610b77565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b83807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102795763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b5050346100fb5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fb57610530610a80565b6024359173ffffffffffffffffffffffffffffffffffffffff8084168094036105de576044358181168091036105da57606435918083168093036105d657600194610579610b77565b16865285602052828620947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009585878254161790558652828620848682541617905585528185208385825416179055845283209182541617905580f35b8680fd5b8580fd5b8480fd5b839150346100fb57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fb5767ffffffffffffffff602435818111610846573660238201121561084657808301359082821161081a576020957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928151926106768986601f8501160185610a10565b81845236602483830101116108165781889260248b930183870137840101523386528587526106aa60ff8288205416610afb565b843586526001906001885286209482519485116107ea57506106cc8554610aa8565b601f81116107b1575b508692601f851160011461073057505084839495965092610725575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c191617905580f35b0151905084806106f1565b84979392919716968587528387209387915b89831061079a5750505083600195969710610763575b505050811b01905580f35b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055848080610758565b838501518655948501949381019391810191610742565b6107da90868852888820601f870160051c8101918a88106107e0575b601f0160051c0190610b60565b876106d5565b90915081906107cd565b8660416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8780fd5b6024856041867f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8380fd5b83807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102795763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b9150923461027957602093847ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fb5735815283826001808352858420849181549161090283610aa8565b80865292600181169081156109ce5750600114610991575b50505061092d9250959392950382610a10565b82519382859384528251928382860152825b84811061097b57505050828201840152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168101030190f35b818101830151888201880152879550820161093f565b86528486209492508591905b8183106109b657508894505082010161092d388061091a565b8554888401850152948501948794509183019161099d565b91505061092d9593507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201018692388061091a565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610a5157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610aa357565b600080fd5b90600182811c92168015610af1575b6020831014610ac257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691610ab7565b15610b0257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e617574686f72697a65642063616c6c6572000000000000000000000000006044820152fd5b818110610b6b575050565b60008155600101610b60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543303610ba157565b6382b429006000526004601cfdfea264697066735822122034c03046e16ef7a8ce27a50aa038a08a13a96f22082fcb29cf6522af02b44f7264736f6c63430008180033", - "nonce": "0x2", + "input": "0x60806040523460855760ff196002541660025533638b78c6d819553360007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a36000805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec805460ff191660011790556040516116dd908161008b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80631d345bc6146111bc578063256929621461115257806340070f2d14610fba57806348213a5614610f1857806354d1f13d14610eb25780635778ea3214610b7057806359d14b4114610b065780635c975abb14610ac5578063715018a614610a255780637fc1ca02146109e95780638da5cb5b146109785780639e5464b2146107f3578063a192c81d14610650578063aa1b5295146104ed578063aad8a0e714610460578063af9307f5146103ab578063ba2b3e321461030d578063e973fddc146102c9578063f04e283e1461025b578063f0c5f38f146101c0578063f2fde38b146101645763fee81cf41461010e57600080fd5b3461015f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57610145611245565b63389a75e1600c52600052602080600c2054604051908152f35b600080fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57610196611245565b61019e611458565b8060601b156101b2576101b090611518565b005b637448fbae6000526004601cfd5b3461015f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f576101f7611458565b6101ff6115d0565b6102076115d0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00600254166002557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5761028d611245565b610295611458565b63389a75e1600c52806000526020600c2090815442116102bb5760006101b09255611518565b636f5e88186000526004601cfd5b3461015f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5760206103056004356114d7565b604051908152f35b3461015f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57610344611458565b61034c61159a565b61035461159a565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060025416176002557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b3461015f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f576024357fffffffffffffffffffffffffffffffffffff00000000000000000000000000008116810361015f5733600052600360205261042060ff604060002054166112c6565b600435600052600160205260406000209060701c7fffffffffffffffffffffffffffff000000000000000000000000000000000000825416179055600080f35b3461015f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5773ffffffffffffffffffffffffffffffffffffffff6104ac611245565b6104b4611458565b16600052600360205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055600080f35b3461015f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57610524611268565b61052c611297565b90604435917fffffffffffffffffffffffffffffffffffff0000000000000000000000000000831680930361015f576106086105dc9133600052600360205261057c60ff604060002054166112c6565b604051928391602083019586906012927fffffffffffffffffffffffffffffffff000000000000000000000000000000007fffff000000000000000000000000000000000000000000000000000000000000921683521660108201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826113d0565b5190209081600052600060205261063381604060002060019160005201602052604060002054151590565b1561063a57005b6101b0916000526000602052604060002061161f565b3461015f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57610687611268565b6105dc61069561057c611297565b519020806000526000602052604060002054906106b182611440565b916106bf60405193846113d0565b8083526106cb81611440565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501930136843760005b8281106107675783856040519182916020830190602084525180915260408301919060005b81811061072c575050500390f35b82517fffffffffffffffffffffffffffffffffffff00000000000000000000000000001684528594506020938401939092019160010161071e565b8160005260006020527fffffffffffffffffffffffffffffffffffff000000000000000000000000000061079f826040600020611607565b90549060031b1c169085518110156107c45760019160208260051b88010152016106f9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3461015f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5733600052600360205261083c60ff604060002054166112c6565b600435600052600560205260406000206040519081600082549261085f8461132b565b808452936001811690811561093857506001146108f1575b50610884925003826113d0565b60405190602082528181519182602083015260005b8381106108d95750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604080968601015201168101030190f35b60208282018101516040878401015285935001610899565b90506000929192526020600020906000915b81831061091c5750509060206108849282010184610877565b6020919350806001915483858801015201910190918392610903565b602093506108849592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010184610877565b3461015f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b3461015f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f576020610305600435611490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57610a57611458565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a360007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392755005b3461015f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57602060ff600254166040519015158152f35b3461015f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5773ffffffffffffffffffffffffffffffffffffffff610b52611245565b166000526004602052602060ff604060002054166040519015158152f35b3461015f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5760243560043567ffffffffffffffff821161015f573660238301121561015f57816004013567ffffffffffffffff811161015f57366024828501011161015f57336000526003602052610bf960ff604060002054166112c6565b610c0b610c0583611490565b926114d7565b90826000526005602052604060002090600094610c3282610c2c855461132b565b8561137e565b8590601f8311600114610e0c57610c7e9291879183610dfe575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b60405192604435602085015260208452610c9c6040856113d0565b8181526005602052604081209084519067ffffffffffffffff8211610dd157610cc982610c2c855461132b565b602090601f8311600114610d3157604096610d1793929083610d265750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b82519182526020820152f35b015190508780610c4c565b957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08316848852828820975b818110610db957509160409791846001959410610d82575b505050811b019055610d1a565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055868080610d75565b83830151895560019098019760209384019301610d5d565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526041600452fd5b602492500101358780610c4c565b83875260208720917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416885b818110610e975750908460019594939210610e5c575b505050811b019055610c81565b01602401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600384901b60f8161c19169055868080610e4f565b91936020600181926024888801013581550195019201610e39565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5763389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2005b3461015f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57610f4f611245565b6024359081151580920361015f5773ffffffffffffffffffffffffffffffffffffffff90610f7b611458565b16600052600460205260406000209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008354169116179055600080f35b3461015f5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57610ff1611245565b60243573ffffffffffffffffffffffffffffffffffffffff811680910361015f576044359073ffffffffffffffffffffffffffffffffffffffff821680920361015f576064359273ffffffffffffffffffffffffffffffffffffffff841680940361015f5773ffffffffffffffffffffffffffffffffffffffff90611074611458565b166000526003602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556000526003602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556000526003602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556000526003602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055600080f35b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5763389a75e1600c52336000526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a2005b3461015f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5733600052600360205261120560ff604060002054166112c6565b6004356000526001602052602060406000205460701b7fffffffffffffffffffffffffffffffffffff000000000000000000000000000060405191168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361015f57565b600435907fffffffffffffffffffffffffffffffff000000000000000000000000000000008216820361015f57565b602435907fffff0000000000000000000000000000000000000000000000000000000000008216820361015f57565b156112cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e00000000000000000000000000000000000000000000006044820152fd5b90600182811c92168015611374575b602083101461134557565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161133a565b601f821161138b57505050565b6000526020600020906020601f840160051c830193106113c6575b601f0160051c01905b8181106113ba575050565b600081556001016113af565b90915081906113a6565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761141157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff81116114115760051b60200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754330361148257565b6382b429006000526004601cfd5b7f54a09e9a000000000000000000000000000000000000000000000000000000009060405190602082019283526040820152604081526114d16060826113d0565b51902090565b7f628ab4d2000000000000000000000000000000000000000000000000000000009060405190602082019283526040820152604081526114d16060826113d0565b73ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392755565b60ff600254166115a657565b7fd93c06650000000000000000000000000000000000000000000000000000000060005260046000fd5b60ff60025416156115dd57565b7f8dfc202b0000000000000000000000000000000000000000000000000000000060005260046000fd5b80548210156107c45760005260206000200190600090565b60008281526001820160205260409020546116a0578054906801000000000000000082101561141157611659826001809401835582611607565b81549060031b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86831b921b191617905580549260005201602052604060002055600190565b505060009056fea26469706673582212200c7696ae93c0c752a691bb7c255e219aa7f0e520cbb584ac8b96909b129530c164736f6c634300081b0033", + "nonce": "0x4", "chainId": "0x1555e3" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x400d89282a5c9f8ef4634ad22a85b01a493dcf3d1e3339029feb2fe7c153d02b", + "hash": "0xe6d86a0c2123045d35e27046fea9884f4f8550a0b581075ca26ed8ca162c7618", "transactionType": "CREATE", "contractName": "AutomataPcsDao", - "contractAddress": "0x15c702f2c01c109b3261effb0a6a48de0f3ceae5", + "contractAddress": "0xcf171acd6c0a776f9d3e1f6cac8067c982ac6ce1", "function": null, "arguments": [ - "0xbDAF40FbfEA4596f129bD11d273c3Eb64d3B4c62", - "0x5213c0e3Ab478dbc83E8afFF8909717332E4f8E1", - "0x12C1E13Aa2a238EAb15c2e2b6AC670266bc3C814" + "0x2bBc0Ccc218E63Ad4D2bbb7bdE1375B092FD38a2", + "0x0000000000000000000000000000000000000100", + "0x4Aca9C0EB063401C9F5c2Fc4487DBC5ccF1C9E2B", + "0x6e204fEAe40F668a06E78a83b66185FFC8892DDA" ], "transaction": { - "from": "0xdc3bda6d40f0e33e0dfa4aef9604b66195e6c5dc", - "gas": "0x276640", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", + "gas": "0x27498d", "value": "0x0", - "input": "0x608034620000da57601f6200227e38819003918201601f19168301916001600160401b03831184841017620000df57808492606094604052833981010312620000da576200004d81620000f5565b906200006a60406200006260208401620000f5565b9201620000f5565b60018060a01b0380928160018060a01b03199516856000541617600055168360015416176001551690600254161760025533638b78c6d819553360007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a360405161217390816200010b8239f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620000da5756fe6080604052600436101561001257600080fd5b60003560e01c806308854e0414610152578063189d97f71461014d57806325692962146101485780632bce0147146100fd57806337b8762d146101435780633b3954551461013e57806354d1f13d146101395780636b1c539914610134578063715018a61461012f578063722f13271461012a5780638da5cb5b14610125578063974ddd9514610120578063b414d0b21461011b578063bf721aaf14610116578063eae1c31d14610111578063ec950d331461010c578063f04e283e14610107578063f2fde38b14610102578063fb1c0125146100fd5763fee81cf4146100f857600080fd5b61153b565b6106be565b6114e1565b611471565b61141f565b611384565b611349565b61131c565b6112ab565b61123a565b611167565b611081565b610dbb565b610d56565b61074a565b6106f8565b610651565b610607565b6101f4565b60043590600482101561016657565b600080fd5b9181601f840112156101665782359167ffffffffffffffff8311610166576020838186019501011161016657565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261016657600435600481101561016657916024359067ffffffffffffffff8211610166576101f09160040161016b565b9091565b346101665761020236610199565b906004918284101561056e578315801561055b575b6105245761025661023d60025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b6040938451907fa91105ce000000000000000000000000000000000000000000000000000000008252602091828180610292888a8784016117a7565b0381875afa908115610431576000916104f7575b50156104d05785517f634fdad5000000000000000000000000000000000000000000000000000000008152600081806102e2888a8784016117a7565b0381875afa80156104315761033e916000916104ad575b506103038961059c565b6002891480801561049a575b156104915761031d8a61059c565b156104845761032a6118cf565b848151910120908481519101201415151590565b61045d576000865180947ffcf0be24000000000000000000000000000000000000000000000000000000008252818061037a898b8884016117a7565b03915afa8015610431576000938491610436575b5082600088518061039f818961198b565b039060025afa15610431576103c46103c891600051906103be8b611ce4565b91611d5e565b1590565b61040a576104066103f787896103ef896103ea8a8a8a81519101209285611add565b611af3565b9283916105d5565b55519081529081906020820190565b0390f35b85517fe7ef341f000000000000000000000000000000000000000000000000000000008152fd5b61170e565b905061045491933d8091833e61044c8183611619565b810190611947565b9290923861038e565b85517f1e7ab599000000000000000000000000000000000000000000000000000000008152fd5b61048c611896565b61032a565b5061048c611824565b506104a48a61059c565b60018a1461030f565b6104ca91503d806000833e6104c28183611619565b8101906117ed565b386102f9565b85517fdba942a2000000000000000000000000000000000000000000000000000000008152fd5b6105179150833d851161051d575b61050f8183611619565b81019061178f565b386102a6565b503d610505565b6040517f9849e7740000000000000000000000000000000000000000000000000000000081526024906105598186018761158c565bfd5b506105658461059c565b60038414610217565b6021837f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b600411156105a657565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110156105a6576000526004602052604060002090565b60048110156105a6576000526003602052604060002090565b346101665760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610166576020610648610643610157565b6105d5565b54604051908152f35b6000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106bb5763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b80fd5b346101665760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016657602060405160008152f35b346101665760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016657602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346101665761075836610199565b9061077e61023d61023d60015473ffffffffffffffffffffffffffffffffffffffff1690565b9160409283517fed3337850000000000000000000000000000000000000000000000000000000081526020906004908281806107bd888a8784016117a7565b0381875afa90811561043157600091610d39575b50156104d05785517f634fdad50000000000000000000000000000000000000000000000000000000081526000818061080d888a8784016117a7565b0381875afa90811561043157600091610d1e575b508651907f35c757bd00000000000000000000000000000000000000000000000000000000825260008280610859898b8884016117a7565b0381885afa91821561043157600092610d01575b50610876611824565b906060906108838b61059c565b60028b03610c91576108ae91506108986118cf565b925b868151910120908681519101201415151590565b610c695780519084012081519184019190912003610c42576000805260046020526108fa7f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5b5461171a565b6109038861059c565b8715908115610aef575086517f6d3537a000000000000000000000000000000000000000000000000000000000815260008180610943898b8884016117a7565b0381885afa8015610431577f89f72d7c488e5b53a77c23ebcb36970ef7eb5bcf6658e9b8292cfbe4703a847391600091610acc575b5084815191012003610aa4575b61098d611cb2565b906000885180967ffcf0be2400000000000000000000000000000000000000000000000000000000825281806109c68b8d8a84016117a7565b03915afa8015610431576000958691610a85575b508460008a51806109eb818b61198b565b039060025afa156104315760005191610a038b61059c565b15610a4357610a1892506103be36888a6119a2565b1561040a576104066103f78789610a3b896103ea8a8a8a81519101209285611a3a565b9283916105ee565b825190919015610a5d5790610a589291611d5e565b610a18565b8389517fcd69d374000000000000000000000000000000000000000000000000000000008152fd5b9050610a9b91953d8091833e61044c8183611619565b949094386109da565b5085517fe1406f79000000000000000000000000000000000000000000000000000000008152fd5b610ae991503d806000833e610ae18183611619565b8101906116e8565b38610978565b8051610afc575b50610985565b87517fb29b51cb000000000000000000000000000000000000000000000000000000008152848180610b318a8c8984016117a7565b0381895afa908115610431578590600092610c11575b50610ba29192610b6f61023d60025473ffffffffffffffffffffffffffffffffffffffff1690565b8b5180809581947fcedb9781000000000000000000000000000000000000000000000000000000008352888b8401611917565b03915afa90811561043157600091610bf4575b5015610af65782610bf08a928a519384937f291990cd000000000000000000000000000000000000000000000000000000008552840161192e565b0390fd5b610c0b9150853d871161051d5761050f8183611619565b38610bb5565b610ba29250610c3590823d8411610c3b575b610c2d8183611619565b810190611908565b91610b47565b503d610c23565b85517f92ec707e000000000000000000000000000000000000000000000000000000008152fd5b8288517f1e7ab599000000000000000000000000000000000000000000000000000000008152fd5b610c9a8b61059c565b60018b03610cb5576108ae9150610caf611896565b9261089a565b610cbe8b61059c565b60038b03610cd3576108ae9150610caf61185d565b610cdc8b61059c565b8a15610ced575b6108ae919261089a565b6108ae9150610cfa611824565b9150610ce3565b610d179192503d806000833e6104c28183611619565b903861086d565b610d3391503d806000833e6104c28183611619565b38610821565b610d509150833d851161051d5761050f8183611619565b386107d1565b6000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106bb5763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b34610166576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610166576004803567ffffffffffffffff811161016657610e0b903690830161016b565b610e2d61023d60025473ffffffffffffffffffffffffffffffffffffffff1690565b60409384517fa91105ce000000000000000000000000000000000000000000000000000000008152868180610e6587898784016117a7565b0381865afa90811561043157600091611064575b501561103d5784517f634fdad500000000000000000000000000000000000000000000000000000000815260008180610eb587898784016117a7565b0381865afa801561043157610ee991600091611022575b50610ed5611824565b888151910120908881519101201415151590565b610ffb576000855180937ffcf0be240000000000000000000000000000000000000000000000000000000082528180610f25888a8884016117a7565b03915afa8015610431576000928391610fdc575b50866000875180610f4a818861198b565b039060025afa15610431576103c4610f6891600051906103be611cb2565b610fb55750610f82929181866103ea935191012092611aa1565b60008052600460205290817f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5551908152f35b84517fe7ef341f000000000000000000000000000000000000000000000000000000008152fd5b9050610ff291923d8091833e61044c8183611619565b91909138610f39565b84517f1e7ab599000000000000000000000000000000000000000000000000000000008152fd5b61103791503d806000833e6104c28183611619565b38610ecc565b84517fdba942a2000000000000000000000000000000000000000000000000000000008152fd5b61107b9150873d891161051d5761050f8183611619565b38610e79565b6000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106bb576110b4611c18565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b60005b8381106111145750506000910152565b8181015183820152602001611104565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361116081518092818752878088019101611101565b0116010190565b346101665760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101665761119e610157565b6060906111aa816105ee565b548015611204576111e6926111ca6111c46104069361171a565b936105d5565b54806111f4575b50604051938493604085526040850190611124565b908382036020850152611124565b6111fe915061171a565b386111d1565b6040517f33247a8a000000000000000000000000000000000000000000000000000000008152602490610559600482018561158c565b346101665760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101665760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101665760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101665760206106486112e7610157565b6105ee565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60209101126101665760043590565b3461016657610406611335611330366112ec565b61171a565b604051918291602083526020830190611124565b34610166576020611359366112ec565b604051908152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361016657565b346101665760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610166576113bb611361565b6024359073ffffffffffffffffffffffffffffffffffffffff808316809303610166576113e6611c18565b7fffffffffffffffffffffffff000000000000000000000000000000000000000091168160015416176001556002541617600255600080f35b346101665760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016657602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610166576114a3611361565b6114ab611c18565b63389a75e1600c52806000526020600c2090815442116114d35760006114d19255611c50565b005b636f5e88186000526004601cfd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016657611513611361565b61151b611c18565b8060601b1561152d576114d190611c50565b637448fbae6000526004601cfd5b346101665760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016657611572611361565b63389a75e1600c52600052602080600c2054604051908152f35b9060048210156105a65752565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff81116115dc57604052565b611599565b6040810190811067ffffffffffffffff8211176115dc57604052565b60c0810190811067ffffffffffffffff8211176115dc57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176115dc57604052565b67ffffffffffffffff81116115dc57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b909291926116a18161165a565b916116af6040519384611619565b8294828452828201116101665760206116c9930190611101565b565b9080601f830112156101665781516116e592602001611694565b90565b9060208282031261016657815167ffffffffffffffff8111610166576116e592016116cb565b6040513d6000823e3d90fd5b600073ffffffffffffffffffffffffffffffffffffffff815416916024604051809481937f03f2c7da00000000000000000000000000000000000000000000000000000000835260048301525afa9081156104315760009161177a575090565b6116e591503d806000833e610ae18183611619565b90816020910312610166575180151581036101665790565b90601f836040947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093602086528160208701528686013760008582860101520116010190565b6020818303126101665780519067ffffffffffffffff821161016657019080601f830112156101665781516116e592602001611694565b60405190611831826115e1565b601182527f496e74656c2053475820526f6f742043410000000000000000000000000000006020830152565b6040519061186a826115e1565b601582527f496e74656c2053475820544342205369676e696e6700000000000000000000006020830152565b604051906118a3826115e1565b601a82527f496e74656c205347582050434b2050726f636573736f722043410000000000006020830152565b604051906118dc826115e1565b601982527f496e74656c205347582050434b20506c6174666f726d204341000000000000006020830152565b90816020910312610166575190565b6040906116e5939281528160208201520190611124565b6020909392919361194381604081019661158c565b0152565b9190916040818403126101665780519267ffffffffffffffff9384811161016657816119749184016116cb565b936020830151908111610166576116e592016116cb565b9061199e60209282815194859201611101565b0190565b9291926119ae8261165a565b916119bc6040519384611619565b829481845281830111610166578281602093846000960137010152565b60408051919067ffffffffffffffff90838101828111858210176115dc57815283600080825282519360c0850190858210908211176115dc578382916020955281865281858701528501528060608501526060608085015260a08401520152565b90611a50611a7c92611a4a6119d9565b506105ee565b549260405193611a5f856115fd565b3385526000602086015260016040860152606085015236916119a2565b6080820152600060a082015260405190611a95826115e1565b60008252602082015290565b611a7c90611aad6119d9565b506000805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec611a50565b90611a50611a7c92611aed6119d9565b506105d5565b60200160608151015190611b068261171a565b51611b9a575b6080915051015173ffffffffffffffffffffffffffffffffffffffff60005416803b1561016657611b7f6000929183926040519485809481937f3a91c226000000000000000000000000000000000000000000000000000000008352896004840152604060248401526044830190611124565b03925af1801561043157611b91575090565b6116e5906115c8565b73ffffffffffffffffffffffffffffffffffffffff6000541691823b15610166576000926024849260405195869384927f86911cde00000000000000000000000000000000000000000000000000000000845260048401525af191821561043157608092611c09575b50611b0c565b611c12906115c8565b38611c03565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543303611c4257565b6382b429006000526004601cfd5b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6000805260036020526116e57f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff6108f4565b611ced816105ee565b54600080526003602052907f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff549060048110156105a65760028114908115611d4a575b5015611d4057506116e59061171a565b6116e5915061171a565b60019150611d578161059c565b1438611d30565b60409182815103611eda57611dc69373ffffffffffffffffffffffffffffffffffffffff6001541690845180927f6d3537a00000000000000000000000000000000000000000000000000000000082526020600483015281806000998a956024830190611124565b03915afa908115610431578591611ec0575b5083815103611eb9579380809383600197611e0a611dff611e04611dff611ea79b99611f89565b611ee3565b93612064565b90611e23611dff611e1d611dff84611f89565b92612064565b9187519360208501958652888501526060840152608083015260a082015260a08152611e4e816115fd565b519073c2b78104907f722dabac4c69f826a522b2754de45afa903d15611eab5790611e98913d611e89611e808261165a565b92519283611619565b8152809360203d92013e611f24565b60208082518301019101611908565b1490565b509050611e98606091611f24565b5050505090565b611ed491503d8087833e610ae18183611619565b38611dd8565b50505050600090565b602081519101519060208110611ef7575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b15611f2b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b805160209081116101665760405191611fa1836115e1565b81835281830190823683378280910191925b80821015612012575080611ff357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b61200761200261200c926120f3565b61212e565b612101565b90611fe5565b9091928351815281810180911161205f579281810180911161205f57917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811161205f5790611fb3565b611f5a565b8051604011610166576040519061207a826115e1565b6020908183528183019082368337604083910191925b808210156120a6575080611ff357509192915050565b9091928351815281810180911161205f579281810180911161205f57917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811161205f5790612090565b602003906020821161205f57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161205f57565b601f811161205f576101000a9056fea264697066735822122079bae069a7150f64e59b9ca42edf1c15861a40dfcc7f2d17994416f3b534264164736f6c63430008180033000000000000000000000000bdaf40fbfea4596f129bd11d273c3eb64d3b4c620000000000000000000000005213c0e3ab478dbc83e8afff8909717332e4f8e100000000000000000000000012c1e13aa2a238eab15c2e2b6ac670266bc3c814", - "nonce": "0x3", + "input": "0x60a0346100ce57601f6122df38819003918201601f19168301916001600160401b038311848410176100d3578084926080946040528339810103126100ce57610047816100e9565b90610054602082016100e9565b61006c6060610065604085016100e9565b93016100e9565b600080546001600160a01b039586166001600160a01b0319918216179091556080929092526001805493851693831693909317909255600280549290931691161790556040516121e190816100fe8239608051818181610c5c0152611eef0152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036100ce5756fe6080604052600436101561001257600080fd5b60003560e01c806304f3bcec146100c757806308854e04146100c257806337b8762d146100bd5780633b395455146100b8578063536c633d146100b35780636b1c5399146100ae578063722f1327146100a9578063b13bf290146100a4578063b414d0b21461009f578063bf721aaf1461009a5763ec950d331461009557600080fd5b61136f565b61122a565b611202565b611109565b610f4e565b610c80565b610c11565b6105b7565b610565565b6101b6565b346101195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011957602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b600080fd5b60043590600482101561011957565b9181601f840112156101195782359167ffffffffffffffff8311610119576020838186019501011161011957565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261011957600435600481101561011957916024359067ffffffffffffffff8211610119576101b29160040161012d565b9091565b34610119576101c43661015b565b919060048210156105365781158015610523575b6104f257600061021961020060025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b906040517fa91105ce000000000000000000000000000000000000000000000000000000008152602081806102528988600484016116ae565b0381865afa9081156103f55782916104c3575b501561049b576040517f634fdad50000000000000000000000000000000000000000000000000000000081528181806102a28988600484016116ae565b0381865afa9081156103f55761030591610301918491610479575b506102c7876113c1565b60028714808015610466575b15610457576102e1886113c1565b1561044a576102ee61181d565b6020815191012090602081519101201490565b1590565b610422578060405180937ffcf0be2400000000000000000000000000000000000000000000000000000000825281806103428a89600484016116ae565b03915afa80156103f557819282916103fa575b5060208260405180610367818861190c565b039060025afa156103f55761030161038b9183519061038588611bf5565b91611c39565b6103cd576103c96103b986866103b4876103ac8860208151910120936115af565b933691611497565b611923565b6040519081529081906020820190565b0390f35b807fe7ef341f0000000000000000000000000000000000000000000000000000000060049252fd5b6116f4565b90506104199192503d8084833e6104118183611417565b8101906118c3565b91909138610355565b807f1e7ab5990000000000000000000000000000000000000000000000000000000060049252fd5b6104526117e2565b6102ee565b5061046061176c565b90610704565b50610470886113c1565b600188146102d3565b61049591503d8086833e61048d8183611417565b810190611735565b386102bd565b807fdba942a20000000000000000000000000000000000000000000000000000000060049252fd5b6104e5915060203d6020116104eb575b6104dd8183611417565b810190611699565b38610265565b503d6104d3565b61051f827f9849e774000000000000000000000000000000000000000000000000000000006000526113d8565b6000fd5b5061052d826113c1565b600382146101d8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b346101195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011957602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b34610119576105c53661015b565b6105ea61020061020060015473ffffffffffffffffffffffffffffffffffffffff1690565b926040517fed333785000000000000000000000000000000000000000000000000000000008152602081806106238688600484016116ae565b0381885afa9081156103f557600091610bf2575b5015610bc8576040517f634fdad5000000000000000000000000000000000000000000000000000000008152600081806106758688600484016116ae565b0381885afa9081156103f557600091610bad575b506040517f35c757bd000000000000000000000000000000000000000000000000000000008152600081806106c28789600484016116ae565b0381895afa9081156103f557600091610b92575b506106df61176c565b60606106ea856113c1565b60028503610b1157506103016107189161070261181d565b945b906020815191012090602081519101201490565b610ae7576107389161030191906020815191012090602081519101201490565b610abd5761074c6107476114ce565b6119d3565b610755826113c1565b811590811561096957506040517f6d3537a0000000000000000000000000000000000000000000000000000000008152600081806107978789600484016116ae565b0381895afa80156103f5577f89f72d7c488e5b53a77c23ebcb36970ef7eb5bcf6658e9b8292cfbe4703a847391600091610946575b50602081519101200361091c575b6107e2611be0565b600060405180977ffcf0be24000000000000000000000000000000000000000000000000000000008252818061081c898b600484016116ae565b03915afa9081156103f55760009687926108fe575b506020600060405180610844818c61190c565b039060025afa156103f5576000519261085c856113c1565b156108bc57509061087291610385368688611497565b15610892576103b46103b9936103ac8660206103c998519101209361153b565b7fe7ef341f0000000000000000000000000000000000000000000000000000000060005260046000fd5b8051909190156108d4576108cf92611c39565b610872565b7fcd69d3740000000000000000000000000000000000000000000000000000000060005260046000fd5b909661091492503d8091833e6104118183611417565b909538610831565b7fe1406f790000000000000000000000000000000000000000000000000000000060005260046000fd5b61096391503d806000833e61095b8183611417565b81019061189d565b386107cc565b8051610976575b506107da565b604051907fb29b51cb000000000000000000000000000000000000000000000000000000008252602082806109af888a600484016116ae565b03818a5afa9182156103f557600092610a87575b506020610a21916109ec61020060025473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947fcedb97810000000000000000000000000000000000000000000000000000000083528860048401611858565b03915afa9081156103f557600091610a68575b50156109705761051f90837f291990cd0000000000000000000000000000000000000000000000000000000060005261186f565b610a81915060203d6020116104eb576104dd8183611417565b38610a34565b610a21919250610aae602091823d8411610ab6575b610aa68183611417565b81019061168a565b9291506109c3565b503d610a9c565b7f92ec707e0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f1e7ab5990000000000000000000000000000000000000000000000000000000060005260046000fd5b610b1a856113c1565b60018503610b38575061030161071891610b326117e2565b94610704565b610b41856113c1565b60038503610b59575061030161071891610b326117a7565b92610b63856113c1565b8415610b77575b6107189161030191610704565b925061030161071891610b8861176c565b9491509150610b6a565b610ba791503d806000833e61048d8183611417565b386106d6565b610bc291503d806000833e61048d8183611417565b38610689565b7fdba942a20000000000000000000000000000000000000000000000000000000060005260046000fd5b610c0b915060203d6020116104eb576104dd8183611417565b38610637565b346101195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461011957600060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ebd5760043567ffffffffffffffff8111610ebb57610cd190369060040161012d565b600254919291610cf69073ffffffffffffffffffffffffffffffffffffffff16610200565b916040517fa91105ce00000000000000000000000000000000000000000000000000000000815260208180610d2f8689600484016116ae565b0381875afa9081156103f5578291610e9c575b501561049b576040517f634fdad5000000000000000000000000000000000000000000000000000000008152818180610d7f8689600484016116ae565b0381875afa80156103f5578261030192610db59492610e80575b50610da3816113c1565b610dac816113c1565b506102ee61176c565b610ae757600060405180937ffcf0be240000000000000000000000000000000000000000000000000000000082528180610df38689600484016116ae565b03915afa80156103f5576000928391610e61575b506020600060405180610e1a818861190c565b039060025afa156103f557610301610e3a91600051906103856000611bf5565b610892576020926103b48385610e599551910120916103ac60006115af565b604051908152f35b9050610e7791923d8091833e6104118183611417565b91909138610e07565b610e959192503d8084833e61048d8183611417565b9038610d99565b610eb5915060203d6020116104eb576104dd8183611417565b38610d42565b505b80fd5b60005b838110610ed35750506000910152565b8181015183820152602001610ec3565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610f1f81518092818752878088019101610ec0565b0116010190565b9091610f3d610f4b93604084526040840190610ee3565b916020818403910152610ee3565b90565b346101195760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011957610f8561011e565b610f8e8161153b565b90606091610fba61020061020061020060005473ffffffffffffffffffffffffffffffffffffffff1690565b604051907f5c975abb000000000000000000000000000000000000000000000000000000008252602082600481845afa9182156103f5576000926110de575b50811561106f575b5061105d575b508151156110305761101b611020916115af565b611ceb565b906103c960405192839283610f26565b61051f907f33247a8a000000000000000000000000000000000000000000000000000000006000526113d8565b6110689192506119d3565b9038611007565b6040517f59d14b410000000000000000000000000000000000000000000000000000000081523360048201529150602090829060249082905afa9081156103f5576000916110bf575b5038611001565b6110d8915060203d6020116104eb576104dd8183611417565b386110b8565b6110f891925060203d6020116104eb576104dd8183611417565b9038610ff9565b8015150361011957565b346101195760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101195761114061011e565b6024359061114d826110ff565b600481101561053657602091604051907fff00000000000000000000000000000000000000000000000000000000000000848301937fe90e3dc700000000000000000000000000000000000000000000000000000000855260f81b166024830152151560f81b6025820152600681526111c7602682611417565b519020604051908152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60209101126101195760043590565b34610119576103c9611216610747366111d2565b604051918291602083526020830190610ee3565b346101195761129a61123b366111d2565b6020600091611261610200845473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809681947fe973fddc000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9182156103f55761130d9282918291611350575b506112d4610200835473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809681947f9e5464b2000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa80156103f55760209282610e599392611335575b505082808251830101910161168a565b61134992503d8091833e61095b8183611417565b3880611325565b611369915060203d602011610ab657610aa68183611417565b386112b2565b346101195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011957602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b6004111561053657565b9060048210156105365752565b906113e660046024936113cb565b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761145857604052565b6113e8565b67ffffffffffffffff811161145857601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926114a38261145d565b916114b16040519384611417565b829481845281830111610119578281602093846000960137010152565b60405160208101907fe90e3dc7000000000000000000000000000000000000000000000000000000008252600060248201527f0100000000000000000000000000000000000000000000000000000000000000602582015260068152611535602682611417565b51902090565b6004811015610536576040517fff0000000000000000000000000000000000000000000000000000000000000060208201927fe90e3dc700000000000000000000000000000000000000000000000000000000845260f81b1660248201526000602582015260068152611535602682611417565b6004811015610536576040517fff0000000000000000000000000000000000000000000000000000000000000060208201927fe90e3dc700000000000000000000000000000000000000000000000000000000845260f81b1660248201527f0100000000000000000000000000000000000000000000000000000000000000602582015260068152611535602682611417565b60405160208101907fe90e3dc7000000000000000000000000000000000000000000000000000000008252600060248201526000602582015260068152611535602682611417565b90816020910312610119575190565b908160209103126101195751610f4b816110ff565b90601f836040947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093602086528160208701528686013760008582860101520116010190565b6040513d6000823e3d90fd5b9092919261170d8161145d565b9161171b6040519384611417565b8294828452828201116101195760206113e6930190610ec0565b6020818303126101195780519067ffffffffffffffff821161011957019080601f83011215610119578151610f4b92602001611700565b6040519061177b604083611417565b601182527f496e74656c2053475820526f6f742043410000000000000000000000000000006020830152565b604051906117b6604083611417565b601582527f496e74656c2053475820544342205369676e696e6700000000000000000000006020830152565b604051906117f1604083611417565b601a82527f496e74656c205347582050434b2050726f636573736f722043410000000000006020830152565b6040519061182c604083611417565b601982527f496e74656c205347582050434b20506c6174666f726d204341000000000000006020830152565b604090610f4b939281528160208201520190610ee3565b919061187e60046044946113cb565b602452565b9080601f83011215610119578151610f4b92602001611700565b9060208282031261011957815167ffffffffffffffff811161011957610f4b9201611883565b91909160408184031261011957805167ffffffffffffffff811161011957836118ed918301611883565b92602082015167ffffffffffffffff811161011957610f4b9201611883565b9061191f60209282815194859201610ec0565b0190565b6040919261198891600073ffffffffffffffffffffffffffffffffffffffff815416928551968795869485937f5778ea320000000000000000000000000000000000000000000000000000000085526004850152606060248501526064840190610ee3565b90604483015203925af19081156103f5576000916119a4575090565b6040813d6040116119cb575b816119bd60409383611417565b81010312610ebb5751919050565b3d91506119b0565b6020611a34916119fb61020060005473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947f7fc1ca02000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9081156103f557611aa8916000918291611ad3575b50611a6f610200835473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947f9e5464b2000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9081156103f557600091611abe575090565b610f4b91503d806000833e61095b8183611417565b611aec915060203d602011610ab657610aa68183611417565b38611a4d565b9015611b7a576020611a3491611b2061020060005473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947fe973fddc000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b611a6f610200835473ffffffffffffffffffffffffffffffffffffffff1690565b6020611ba2916119fb61020060005473ffffffffffffffffffffffffffffffffffffffff1690565b03915afa9081156103f557611aa8916000918291611bc1575b50611b59565b611bda915060203d602011610ab657610aa68183611417565b38611bbb565b611bea60006113c1565b610f4b610747611642565b600481101561053657600281148015611c26575b15611c1a57610747610f4b9161153b565b50610f4b610747611642565b50611c30816113c1565b60018114611c09565b91906040815103611cc6576000611ca09273ffffffffffffffffffffffffffffffffffffffff80600154161660405180809681947f6d3537a00000000000000000000000000000000000000000000000000000000083526020600484018181520190610ee3565b03915afa9182156103f557600092611cce575b506040825103611cc657610f4b92611e7b565b505050600090565b611ce49192503d806000833e61095b8183611417565b9038611cb3565b90606091611d1761020061020061020060005473ffffffffffffffffffffffffffffffffffffffff1690565b604051907f5c975abb000000000000000000000000000000000000000000000000000000008252602082600481845afa9182156103f557600092611de3575b508115611d74575b50611d665750565b610f4b919250600090611af2565b6040517f59d14b410000000000000000000000000000000000000000000000000000000081523360048201529150602090829060249082905afa9081156103f557600091611dc4575b5038611d5e565b611ddd915060203d6020116104eb576104dd8183611417565b38611dbd565b611dfd91925060203d6020116104eb576104dd8183611417565b9038611d56565b602081519101519060208110611e18575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b15611e4c57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008091611f5093600195611ea3611e98611e9d611e9885611f8e565b611e04565b9361209d565b90611ebc611e98611eb6611e9884611f8e565b9261209d565b91604051936020850195865260408501526060840152608083015260a082015260a08152611eeb60c082611417565b51907f00000000000000000000000000000000000000000000000000000000000000005afa3d15611f5457611f413d91611f248361145d565b92611f326040519485611417565b83523d6000602085013e611e45565b6020808251830101910161168a565b1490565b611f41606091611e45565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b805160201161011957611fa1602061145d565b90611faf6040519283611417565b60208252611fbd602061145d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237602080920190915b602081101561204e578061202f57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b61204361203e61204892612161565b61219c565b61216f565b90612021565b9091825181526020810180911161209857916020810180911161209857907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115611fef575b611f5f565b8051604011610119576120b0602061145d565b906120be6040519283611417565b602082526120cc602061145d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060400160205b6020811015612113578061202f57509192915050565b9091825181526020810180911161209857916020810180911161209857907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156120fd57611f5f565b602003906020821161209857565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161209857565b601f8111612098576101000a9056fea264697066735822122021bb47a0a6614cf56a1bf954a37b44efccbd497f46ee6e3cf26049d9830e466864736f6c634300081b00330000000000000000000000002bbc0ccc218e63ad4d2bbb7bde1375b092fd38a200000000000000000000000000000000000000000000000000000000000001000000000000000000000000004aca9c0eb063401c9f5c2fc4487dbc5ccf1c9e2b0000000000000000000000006e204feae40f668a06e78a83b66185ffc8892dda", + "nonce": "0x5", "chainId": "0x1555e3" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x180538b43fbd9f87e647ce6fe61bf902d90ab816906edb4c01f67c962dd76ce1", + "hash": "0x17c7c4e9e1a5d3b9f6e41f64437b8420c7222fb60db809ca58f01bed9e48a6dd", "transactionType": "CREATE", "contractName": "AutomataPckDao", - "contractAddress": "0x77d4a1136de08f97fd2ffb71a109c8cee3f4b031", + "contractAddress": "0x31f18aa7b4cbad7a726bcbf5ab3e286fc0b02a82", "function": null, "arguments": [ - "0xbDAF40FbfEA4596f129bD11d273c3Eb64d3B4c62", - "0x15C702f2c01C109B3261EfFB0A6a48de0F3cEAE5", - "0x5213c0e3Ab478dbc83E8afFF8909717332E4f8E1", - "0x12C1E13Aa2a238EAb15c2e2b6AC670266bc3C814" + "0x2bBc0Ccc218E63Ad4D2bbb7bdE1375B092FD38a2", + "0xcf171ACd6c0a776f9d3E1F6Cac8067c982Ac6Ce1", + "0x0000000000000000000000000000000000000100", + "0x4Aca9C0EB063401C9F5c2Fc4487DBC5ccF1C9E2B", + "0x6e204fEAe40F668a06E78a83b66185FFC8892DDA" ], "transaction": { - "from": "0xdc3bda6d40f0e33e0dfa4aef9604b66195e6c5dc", - "gas": "0x38025d", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", + "gas": "0x37ef59", "value": "0x0", - "input": "0x608034620000ff57601f6200310c38819003918201601f19168301916001600160401b038311848410176200010457808492608094604052833981010312620000ff576200004d816200011a565b906200005c602082016200011a565b62000078606062000070604085016200011a565b93016200011a565b9060018060a01b038080948160018060a01b03199716876000541617600055169182866001541617600155168460025416176002558360035416176003551690600454161760045533638b78c6d819553360007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3604051612fdc9081620001308239f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620000ff5756fe6080604052600436101561001257600080fd5b60003560e01c80632569296214610192578063286858391461018d57806336c33bb61461015157806337b8762d14610188578063382e8f6b146101835780633c7d71141461017e57806348ac80591461017957806354d1f13d1461017457806359a517ff1461016f5780635be0fa4b1461016a57806368ef0c5314610165578063715018a6146101605780637eb619c71461015b5780638da5cb5b14610156578063980e087814610151578063b414d0b21461014c578063bf721aaf14610147578063c925d17a14610142578063d88d1df61461013d578063e4a4171a14610138578063ec950d3314610133578063f04e283e1461012e578063f2fde38b146101295763fee81cf41461012457600080fd5b610f65565b610f0b565b610e9b565b610e49565b610e23565b610dd1565b610d11565b610cf9565b610cd1565b610608565b610c60565b610ba9565b610b29565b610b03565b610a0f565b6109bd565b610958565b6108ee565b61081d565b6106b7565b610642565b61038f565b6000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fc5763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b80fd5b9181601f8401121561022d5782359167ffffffffffffffff831161022d576020838186019501011161022d57565b600080fd5b60005b8381106102455750506000910152565b8181015183820152602001610235565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361029181518092818752878088019101610232565b0116010190565b9060408201916040815281518093526060810160608460051b830101936020809401916000905b8282106103475750505050818184039101528251908183528083019281808460051b8301019501936000915b8483106102fb5750505050505090565b9091929394958480610337837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528a51610255565b98019301930191949392906102eb565b909192958580610381837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089600196030186528a51610255565b9801920192019092916102bf565b3461022d576040807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022d5767ffffffffffffffff60043581811161022d576103e09036906004016101ff565b92909160243590811161022d5761041a6104016104399236906004016101ff565b9190610412606096879836916110ee565b9236916110ee565b610422611125565b61042a611125565b91610433611125565b93611df5565b50506040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000841660208083019182527fffff0000000000000000000000000000000000000000000000000000000000008516603084015260128352947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0949350916104c6603282611052565b519020946104de866000526005602052604060002090565b5493846104f9575b604051806104f58b8b83610298565b0390f35b91938096985061050c9193959750611150565b9561051686611150565b978760005b8881106105295750506104e6565b6105ea6105e56105bc6105dd846001966105cd8c6105c88d8d6105886105638f61055e8a916000526005602052604060002090565b612981565b7fffffffffffffffffffffffffffffffffffff00000000000000000000000000001690565b9889945194859283017fffffffffffffffffffffffffffffffffffff00000000000000000000000000006012921681520190565b03908101835282611052565b611f72565b6105d783836111e6565b526111e6565b508a8a611fe1565b611ab1565b6105f4828d6111e6565b526105ff818c6111e6565b5001889061051b565b3461022d5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022d57602060405160008152f35b3461022d5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022d57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361022d57565b3461022d5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022d576106ee610694565b6024359073ffffffffffffffffffffffffffffffffffffffff9182811680910361022d576044359280841680940361022d57610728612083565b7fffffffffffffffffffffffff000000000000000000000000000000000000000092168260025416176002558160015416176001556004541617600455600080f35b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261022d5767ffffffffffffffff9060043582811161022d57816107b5916004016101ff565b9390939260243581811161022d57836107d0916004016101ff565b9390939260443583811161022d57826107eb916004016101ff565b9390939260643591821161022d57610805916004016101ff565b9091565b90602061081a928181520190610255565b90565b3461022d576104f56104126108b461089061088461086d61086561085d6108433661076a565b999660009e95949993969e989192985060609e36916110ee565b9836916110ee565b9536916110ee565b916040519361087b85611036565b60008552611df5565b509082849593946120bb565b60005260066020526108ae6108a9604060002054611ab1565b6111ff565b91611fe1565b806108cf575b50604051918291602083526020830190610255565b6108d99150611ab1565b386108ba565b60043590600482101561022d57565b3461022d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022d5761094a6104f561093361092e6108df565b6112b0565b604092919251938493604085526040850190610255565b908382036020850152610255565b6000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fc5763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b3461022d5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022d57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b3461022d5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022d57610a466108df565b67ffffffffffffffff60243581811161022d57610a679036906004016101ff565b9260443583811161022d57610a809036906004016101ff565b9060643585811161022d57610a999036906004016101ff565b92909160843596871161022d576104f597610abb610ac39836906004016101ff565b979096611435565b6040519081529081906020820190565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602091011261022d5760043590565b3461022d57610b1136610ad3565b60005260076020526020604060002054604051908152f35b6000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fc57610b5c612083565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b3461022d576104f5610412610bef610be561085d61086561086d610bcc3661076a565b979660009d95929993949a91969d5060609d36916110ee565b50929190916120bb565b600052600660205260406000205480610c175750604051918291602083526020830190610255565b6108d991506108a9610c2891611ab1565b7fffffffffffffffffffffffffffffffffffff000000000000000000000000000060405191166020820152601281526105c881610fe5565b3461022d5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022d5760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b3461022d576104f5610ce56105e536610ad3565b604051918291602083526020830190610255565b3461022d576020610d0936610ad3565b604051908152f35b3461022d5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022d5767ffffffffffffffff6004803582811161022d57610d6190369083016101ff565b9060243584811161022d57610d7990369085016101ff565b9060443586811161022d57610d9190369087016101ff565b9060643588811161022d57610da990369089016101ff565b949093608435998a1161022d57610dc9610ac3996104f59b3691016101ff565b989097611c16565b3461022d5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022d57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b3461022d57610e3136610ad3565b60005260066020526020604060002054604051908152f35b3461022d5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022d57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022d57610ecd610694565b610ed5612083565b63389a75e1600c52806000526020600c209081544211610efd576000610efb92556123da565b005b636f5e88186000526004601cfd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022d57610f3d610694565b610f45612083565b8060601b15610f5757610efb906123da565b637448fbae6000526004601cfd5b3461022d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022d57610f9c610694565b63389a75e1600c52600052602080600c2054604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761100157604052565b610fb6565b60c0810190811067ffffffffffffffff82111761100157604052565b67ffffffffffffffff811161100157604052565b6020810190811067ffffffffffffffff82111761100157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761100157604052565b60405190610120820182811067ffffffffffffffff82111761100157604052565b67ffffffffffffffff811161100157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926110fa826110b4565b916111086040519384611052565b82948184528183011161022d578281602093846000960137010152565b6040519061113282611036565b60008252565b67ffffffffffffffff81116110015760051b60200190565b9061115a82611138565b6111676040519182611052565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06111958294611138565b019060005b8281106111a657505050565b80606060208093850101520161119a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156111fa5760209160051b010190565b6111b7565b90602082519201517fffffffffffffffffffffffffffffffffffff000000000000000000000000000090818116936012811061123a57505050565b60120360031b82901b16169150565b6004111561125357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9190602083019260048210156112535752565b9081602091031261022d575190565b6040513d6000823e3d90fd5b9060048210156112535781158015611422575b6113ea5761133e916113066112ed60025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b6040517f974ddd9500000000000000000000000000000000000000000000000000000000928382528180602097889360048301611282565b0381855afa9283156113c65785916000946113cb575b506040519081526000600482015291829060249082905afa9384156113c65760009461138f575b505061138961081a91611ab1565b92611ab1565b61081a92945061138991816113b892903d106113bf575b6113b08183611052565b810190611295565b939161137b565b503d6113a6565b6112a4565b6113e3919450823d84116113bf576113b08183611052565b9238611354565b6040517f9849e7740000000000000000000000000000000000000000000000000000000081528061141e8460048301611282565b0390fd5b5061142c82611249565b600382146112c3565b989695929097919397600494858b1015611a1b578a158015611a08575b6119d55761149d926104126115089a9b9361146e9336916110ee565b9360409485519061147e82611036565b6104336000998a845288519461149386611036565b8b865236916110ee565b98939692979150506114b03685856110ee565b9a6114d36112ed60035473ffffffffffffffffffffffffffffffffffffffff1690565b86517fed3337850000000000000000000000000000000000000000000000000000000081528d818060209e8f93898301610809565b0381855afa9081156113c65784916119b8575b50156119905790828d61155b9493895180809781947f3b79a61e0000000000000000000000000000000000000000000000000000000083528a8301610809565b03915afa9283156113c657829361196c575b5061010083019081518c81519101209d8c606061158984611249565b6115bf916115bb916002860361194a57506115a2612196565b905b880151906020815191012090602081519101201490565b1590565b611922576115e96115bb60808701516115d66121cf565b6020815191012090602081519101201490565b6118fa5760c08501516115fd918d8d6125ac565b61161f6112ed60025473ffffffffffffffffffffffffffffffffffffffff1690565b8c895180927f189d97f70000000000000000000000000000000000000000000000000000000082528180611655878c8301611282565b03915afa9081156113c6578d916116739186916118dd575b50611ab1565b8051611800575b5050611685906112b0565b508051909190156117d857826116a28d92518a519182809261221f565b039060025afa156113c6576116c19260e06115bb935191015190612995565b6117b1575061081a9697986116df6117ab936116e49389898961227d565b6122e5565b91517fffffffffffffffffffffffffffffffff0000000000000000000000000000000084169781019788527fffff000000000000000000000000000000000000000000000000000000000000851660108901527fffffffffffffffffffffffffffffffffffff0000000000000000000000000000861660128901529196879261179881602484015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611052565b5190206000526007602052604060002090565b55612305565b83517fe7ef341f000000000000000000000000000000000000000000000000000000008152fd5b8488517fcd69d374000000000000000000000000000000000000000000000000000000008152fd5b9061185b916118266112ed895473ffffffffffffffffffffffffffffffffffffffff1690565b87518c518095819482937fcedb97810000000000000000000000000000000000000000000000000000000084528d8401612208565b03915afa9081156113c65784916118b0575b50611879578b3861167a565b835188517f167c231a0000000000000000000000000000000000000000000000000000000081528087019182529081906020010390fd5b6118d091508d803d106118d6575b6118c88183611052565b810190612145565b3861186d565b503d6118be565b6118f49150833d85116113bf576113b08183611052565b3861166d565b8589517f92ec707e000000000000000000000000000000000000000000000000000000008152fd5b8589517f1e7ab599000000000000000000000000000000000000000000000000000000008152fd5b9061195486611249565b600186036115a457905061196661215d565b906115a4565b6119899193503d8084833e6119818183611052565b810190611b2e565b913861156d565b8387517fdba942a2000000000000000000000000000000000000000000000000000000008152fd5b6119cf91508c8d3d106118d6576118c88183611052565b3861151b565b6040517f9849e7740000000000000000000000000000000000000000000000000000000081528061141e8d828a01611282565b50611a128b611249565b60038b14611452565b6021867f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b81601f8201121561022d578051611a5f816110b4565b92611a6d6040519485611052565b8184526020828401011161022d5761081a9160208085019101610232565b9060208282031261022d57815167ffffffffffffffff811161022d5761081a9201611a49565b600073ffffffffffffffffffffffffffffffffffffffff815416916024604051809481937f03f2c7da00000000000000000000000000000000000000000000000000000000835260048301525afa9081156113c657600091611b11575090565b61081a91503d806000833e611b268183611052565b810190611a8b565b60208183031261022d57805167ffffffffffffffff9182821161022d57016101208184031261022d57611b5f611093565b9281518452602082015183811161022d5781611b7c918401611a49565b60208501526040820151604085015260608201516060850152608082015183811161022d5781611bad918401611a49565b608085015260a082015183811161022d5781611bca918401611a49565b60a085015260c082015160c085015260e082015183811161022d5781611bf1918401611a49565b60e0850152610100928383015190811161022d57611c0f9201611a49565b9082015290565b61043394611c41611c4994611c3961086594611c519e9c9b969d989d36916110ee565b9b36916110ee565b9636916110ee565b9436916110ee565b6040517fffffffffffffffffffffffffffffffff000000000000000000000000000000008616602082019081527fffff000000000000000000000000000000000000000000000000000000000000861660308301527fffffffffffffffffffffffffffffffffffff0000000000000000000000000000831660328301529496959491939291611ce791611798816044810161176c565b548015611dcb57611cf790611ab1565b91611d1a6112ed60035473ffffffffffffffffffffffffffffffffffffffff1690565b92600060405180957f3b79a61e0000000000000000000000000000000000000000000000000000000082528180611d548660048301610809565b03915afa9384156113c657611dad95611d87611d959360c0611d9d98611d9095600091611db0575b50015190838d6125ac565b84848b8a6127e7565b61287f565b9687956120bb565b6000526006602052604060002090565b55565b611dc591503d806000833e6119818183611052565b38611d7c565b60046040517f82fba295000000000000000000000000000000000000000000000000000000008152fd5b90919293946000956000956000956000956000956020815114611f3a575b506004815114611f02575b506020815114611eca575b506004815114611e92575b506024815114611e415750565b61081a919250611e53611e6a916128a7565b71ffffffffffffffffffffffffffffffffffff1690565b60701b7fffffffffffffffffffffffffffffffffffff00000000000000000000000000001690565b7fffff000000000000000000000000000000000000000000000000000000000000919450611ebf906128a7565b60f01b169238611e34565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000919650611ef7906128a7565b60801b169438611e29565b7fffff000000000000000000000000000000000000000000000000000000000000919850611f2f906128a7565b60f01b169638611e1e565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000919a50611f67906128a7565b60801b169838611e13565b908151916040519260028085019482800186526022600f916f30313233343536373839616263646566600f5201928401935b848103611fbb575050600082525060200160405250565b9091809360018093019284845116519082015383835160041c1651815301929190611fa4565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116602082019081527fffff00000000000000000000000000000000000000000000000000000000000090921660308201527fffffffffffffffffffffffffffffffffffff000000000000000000000000000090921660328301529061206f816044810161176c565b519020600052600760205260406000205490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275433036120ad57565b6382b429006000526004601cfd5b91926040519260208401947fffffffffffffffffffffffffffffffff0000000000000000000000000000000080921686527fffff0000000000000000000000000000000000000000000000000000000000008094166030860152166032840152166042820152602481526060810181811067ffffffffffffffff8211176110015760405251902090565b9081602091031261022d5751801515810361022d5790565b6040519061216a82610fe5565b601a82527f496e74656c205347582050434b2050726f636573736f722043410000000000006020830152565b604051906121a382610fe5565b601982527f496e74656c205347582050434b20506c6174666f726d204341000000000000006020830152565b604051906121dc82610fe5565b601982527f496e74656c205347582050434b204365727469666963617465000000000000006020830152565b60409061081a939281528160208201520190610255565b9061223260209282815194859201610232565b0190565b6040519061224382610fe5565b8160206000918281526040519261225984611006565b80845280838501528060408501528060608501526060608085015260a08401520152565b91612295916122c0949361228f612236565b50611fe1565b92604051936122a385611006565b3385526000602086015260016040860152606085015236916110ee565b6080820152600060a0820152604051906122d982610fe5565b60008252602082015290565b6080602061081a92016122fc606082510151612b1a565b51015182612b9d565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116602082019081527fffff0000000000000000000000000000000000000000000000000000000000009092166030820152612369816032810161176c565b519020908160005260056020526123b87fffffffffffffffffffffffffffffffffffff000000000000000000000000000060406000209216809260019160005201602052604060002054151590565b156123c1575050565b6123d79160005260056020526040600020612daa565b50565b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60808183031261022d57805161ffff8116810361022d5792602091828101519267ffffffffffffffff9384811161022d5782019085601f8301121561022d5781519161248783611138565b926124956040519485611052565b808452828085019160051b8301019188831161022d578301905b8282106124ea575050505093604082015184811161022d57816124d3918401611a49565b93606083015190811161022d5761081a9201611a49565b815160ff8116810361022d5781529083019083016124af565b92919061251a602091604086526040860190610255565b930152565b90602082519201517fffff00000000000000000000000000000000000000000000000000000000000090818116936002811061255a57505050565b60020360031b82901b16169150565b60207fff00000000000000000000000000000000000000000000000000000000000000916125a06001959482815194859201610232565b019160f81b1681520190565b93909291936125d36112ed60035473ffffffffffffffffffffffffffffffffffffffff1690565b9460409060405180977fe81c707e00000000000000000000000000000000000000000000000000000000825281806126126000998a9660048401612503565b03915afa9182156113c6578492859786916127b8575b506126329061251f565b907fffff00000000000000000000000000000000000000000000000000000000000080911691161495604051936126d28561269b602096602083017fffff00000000000000000000000000000000000000000000000000000000000060029260f01b1681520190565b03956126cd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe097888101835282611052565b612c88565b9760605b835188101561271e576001906127166126f96126f28b886111e6565b5160ff1690565b9161270a88519384928b8401612569565b03898101835282611052565b9701966126d6565b90979650610563945061274a93506108a992506105bc612750969299604051958693602085019061221f565b9061221f565b9082159261278b575b505061276157565b60046040517f4a629e24000000000000000000000000000000000000000000000000000000008152fd5b7fffffffffffffffffffffffffffffffffffff000000000000000000000000000016141590503880612759565b90506127dc91975061263293503d8087833e6127d48183611052565b81019061243c565b919892949050612628565b906127fc9392916127f6612236565b506120bb565b6000526006602052604060002054907fffffffffffffffffffffffffffffffffffff0000000000000000000000000000604051911660208201526020815261284381610fe5565b6040519161285083611006565b338352600060208401526001604084015260608301526080820152600060a0820152604051906122d982610fe5565b602060809101612893606082510151612b1a565b51015161081a815160208301209182612b9d565b90600091805190600190816001841160208084015160f01c17613078141660011b925b6128e7575b505050156128d957565b63101827966000526004601cfd5b909194927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff907403010a071000000b0104040208000c05090d060e0f6d03e4088843e41bac00000000000060ff85808b019a88010151161c601f161a908560fc1c82151715029460041b01019483811015612964579190806128ca565b6128cf565b80548210156111fa5760005260206000200190600090565b9061298b91612969565b90549060031b1c90565b60409182815103612b11576129fd9373ffffffffffffffffffffffffffffffffffffffff6001541690845180927f6d3537a00000000000000000000000000000000000000000000000000000000082526020600483015281806000998a956024830190610255565b03915afa9081156113c6578591612af7575b5083815103612af0579380809383600197612a41612a36612a3b612a36612ade9b99612e32565b612d33565b93612f08565b90612a5a612a36612a54612a3684612e32565b92612f08565b9187519360208501958652888501526060840152608083015260a082015260a08152612a8581611006565b519073c2b78104907f722dabac4c69f826a522b2754de45afa903d15612ae25790612acf913d612ac0612ab7826110b4565b92519283611052565b8152809360203d92013e612d74565b60208082518301019101611295565b1490565b509050612acf606091612d74565b5050505090565b612b0b91503d8087833e611b268183611052565b38612a0f565b50505050600090565b612b2381611ab1565b51612b2b5750565b73ffffffffffffffffffffffffffffffffffffffff6000541690813b1561022d576000916024839260405194859384927f86911cde00000000000000000000000000000000000000000000000000000000845260048401525af180156113c657612b925750565b612b9b90611022565b565b73ffffffffffffffffffffffffffffffffffffffff6000541691823b1561022d57612c0892600092836040518096819582947f3a91c2260000000000000000000000000000000000000000000000000000000084526004840152604060248401526044830190610255565b03925af180156113c657612b925750565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6020039060208211612c5657565b612c19565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211612c5657565b805160609291815b612c98575050565b90927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840193808511612c565782518510156111fa5760217fff00000000000000000000000000000000000000000000000000000000000000601f612d2b938601015116604051938491602091612d1781518092858088019101610232565b830191820152036001810184520182611052565b929081612c90565b602081519101519060208110612d47575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b15612d7b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828152600182016020526040902054612e2b578054906801000000000000000082101561100157612de4826001809401835582612969565b81549060031b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86831b921b191617905580549260005201602052604060002055600190565b5050600090565b8051602090811161022d5760405191612e4a83610fe5565b81835281830190823683378280910191925b80821015612ebb575080612e9c57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b612eb0612eab612eb592612c48565b612f97565b612c5b565b90612e8e565b90919283518152818101809111612c565792818101809111612c5657917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111612c565790612e5c565b805160401161022d5760405190612f1e82610fe5565b6020908183528183019082368337604083910191925b80821015612f4a575080612e9c57509192915050565b90919283518152818101809111612c565792818101809111612c5657917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111612c565790612f34565b601f8111612c56576101000a9056fea264697066735822122078615b9f849cb1081dc81b5e40ae25c3acb1b6de6ab06117a96d7c5f5ce2b3b564736f6c63430008180033000000000000000000000000bdaf40fbfea4596f129bd11d273c3eb64d3b4c6200000000000000000000000015c702f2c01c109b3261effb0a6a48de0f3ceae50000000000000000000000005213c0e3ab478dbc83e8afff8909717332e4f8e100000000000000000000000012c1e13aa2a238eab15c2e2b6ac670266bc3c814", - "nonce": "0x4", + "input": "0x60a0346100f657601f61317238819003918201601f19168301916001600160401b038311848410176100fb5780849260a0946040528339810103126100f65761004781610111565b9061005460208201610111565b9061006160408201610111565b9161007a608061007360608501610111565b9301610111565b600080546001600160a01b039687166001600160a01b031991821617909155608092909252600180549386169383168417905560028054948616948316949094179093556003805482169092179091556004805492909316911617905560405161304c908161012682396080518181816109320152612dc50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036100f65756fe6080604052600436101561001257600080fd5b60003560e01c806304f3bcec1461011757806320348d8c14610112578063286858391461010d57806337b8762d146101085780633c7d71141461010357806348ac8059146100fe578063536c633d146100f957806359a517ff146100f45780635be0fa4b146100ef578063784aecf0146100ea5780637eb619c7146100e5578063b414d0b2146100e0578063bf721aaf146100db578063c925d17a146100d6578063d88d1df6146100d15763ec950d33146100cc57600080fd5b610ef8565b610ea6565b610dc0565b610c45565b610c18565b610b2a565b610a85565b6109a8565b610956565b6108e7565b61080a565b610701565b6105e5565b6103ed565b610206565b61012c565b600091031261012757565b600080fd5b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b600435907fffffffffffffffffffffffffffffffff000000000000000000000000000000008216820361012757565b602435907fffff0000000000000000000000000000000000000000000000000000000000008216820361012757565b7fffffffffffffffffffffffffffffffffffff000000000000000000000000000081160361012757565b346101275760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757602061025c61024261017e565b61024a6101ad565b60443591610257836101dc565b610fbf565b604051908152f35b9181601f840112156101275782359167ffffffffffffffff8311610127576020838186019501011161012757565b60005b8381106102a55750506000910152565b8181015183820152602001610295565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936102f181518092818752878088019101610292565b0116010190565b604081016040825282518091526060820190602060608260051b8501019401916000905b8282106103a457505050506020818303910152815180825260208201916020808360051b8301019401926000915b83831061035957505050505090565b9091929394602080610395837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0866001960301875289516102b5565b9701930193019193929061034a565b909192946020806103df837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0896001960301865289516102b5565b97019201920190929161031c565b346101275760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101275760043567ffffffffffffffff81116101275761043c903690600401610264565b9060243567ffffffffffffffff81116101275761047c61046361049b923690600401610264565b9190610474606095869736916110c3565b9236916110c3565b6104846110fa565b61048c6110fa565b916104956110fa565b93611aab565b5050506104a88183611c3d565b91825190816104c5575b604051806104c18888836102f8565b0390f35b9193509193506104d482611127565b926104de83611127565b9460005b8481106104ef57506104b2565b8061059461056361058f61052e610508600196886111bd565b517fffffffffffffffffffffffffffffffffffff00000000000000000000000000001690565b604051928391602083017fffffffffffffffffffffffffffffffffffff00000000000000000000000000006012921681520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610f79565b611d89565b61059e82896111bd565b526105a981886111bd565b506105c96105c46105bd61050884876111bd565b8688610fbf565b612573565b6105d3828a6111bd565b526105de81896111bd565b50016104e2565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101275760043567ffffffffffffffff8111610127578161068091600401610264565b9290929160243567ffffffffffffffff811161012757816106a391600401610264565b9290929160443567ffffffffffffffff811161012757816106c691600401610264565b929092916064359067ffffffffffffffff8211610127576106e991600401610264565b9091565b9060206106fe9281815201906102b5565b90565b346101275761047461074661077c61077761076961074e61073e61072436610637565b989660009e95949d93969e989192985060609e36916110c3565b9736916110c3565b9936916110c3565b90602096604051936107608986610f79565b60008552611aab565b5090828496949593956118d5565b611df0565b917fffffffffffffffffffffffffffffffffffff000000000000000000000000000083166107bc575b5050506104c16040519283928084528301906102b5565b6107cd939450906105c49291610fbf565b903880806107a5565b60043590600482101561012757565b90916107fc6106fe936040845260408401906102b5565b9160208184039101526102b5565b346101275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610127576108416107d6565b60048110156108b857801580156108a5575b610870576108609061125a565b906104c1604051928392836107e5565b600461089f917f9849e774000000000000000000000000000000000000000000000000000000006000526111e0565b60246000fd5b506108af816111d6565b60038114610853565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346101275760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610127576109df6107d6565b60243567ffffffffffffffff8111610127576109ff903690600401610264565b919060443567ffffffffffffffff811161012757610a21903690600401610264565b60649391933567ffffffffffffffff811161012757610a44903690600401610264565b916084359567ffffffffffffffff8711610127576104c197610a6d610a75983690600401610264565b979096611346565b6040519081529081906020820190565b346101275760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757610abc61017e565b610ac46101ad565b906044357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116810361012757606435907fffff000000000000000000000000000000000000000000000000000000000000821682036101275760209361025c936118d5565b3461012757610474610b847fffffffffffffffffffffffffffffffffffff0000000000000000000000000000610ba8610777610b9e61073e610b8c610b6e36610637565b9796959e94919d929398909560609f36916110c3565b9a36916110c3565b90602097604051936107608a86610f79565b50929190916118d5565b1680610bc4575b506104c16040519283928084528301906102b5565b610be191925060405190838201526012815261058f603282610f79565b9038610baf565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60209101126101275760043590565b34610127576104c1610c31610c2c36610be8565b612297565b6040519182916020835260208301906102b5565b3461012757610cce610c5636610be8565b6020600091610c95610c7c845473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b60405180809681947fe973fddc000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa918215610d8c57610d419282918291610d91575b50610d08610c7c835473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809681947f9e5464b2000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa8015610d8c576020928261025c9392610d69575b50508280825183010191016111fb565b610d8592503d8091833e610d7d8183610f79565b810190612271565b3880610d59565b61124e565b610db3915060203d602011610db9575b610dab8183610f79565b8101906111fb565b38610ce6565b503d610da1565b346101275760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101275760043567ffffffffffffffff811161012757610e0f903690600401610264565b60243567ffffffffffffffff811161012757610e2f903690600401610264565b91909260443567ffffffffffffffff811161012757610e52903690600401610264565b9060643567ffffffffffffffff811161012757610e73903690600401610264565b9290916084359667ffffffffffffffff8811610127576104c198610e9e610a75993690600401610264565b98909761196f565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610fba57604052565b610f4a565b917fffffffffffffffffffffffffffffffffffff0000000000000000000000000000907fffff000000000000000000000000000000000000000000000000000000000000604051937fffffffffffffffffffffffffffffffff0000000000000000000000000000000060208601967ff0e2a24600000000000000000000000000000000000000000000000000000000885216602486015216603484015216603682015260288152611071604882610f79565b51902090565b6040519061108761012083610f79565b565b67ffffffffffffffff8111610fba57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926110cf82611089565b916110dd6040519384610f79565b829481845281830111610127578281602093846000960137010152565b60405190611109602083610f79565b60008252565b67ffffffffffffffff8111610fba5760051b60200190565b906111318261110f565b61113e6040519182610f79565b82815260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061116e839561110f565b01910160005b82811061118057505050565b606082820152602001611174565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156111d15760209160051b010190565b61118e565b600411156108b857565b9060048210156108b85752565b9061108760046024936111e0565b90816020910312610127575190565b60206000919392936112208160408101966111e0565b0152565b9060006020604084019361122081846111e0565b60206001919392936112208160408101966111e0565b6040513d6000823e3d90fd5b906112b66020611282610c7c60025473ffffffffffffffffffffffffffffffffffffffff1690565b93604051809381927fb13bf2900000000000000000000000000000000000000000000000000000000083526004830161120a565b0381865afa8015610d8c576112d391600091611327575b50612573565b91602060405180927fb13bf290000000000000000000000000000000000000000000000000000000008252818061130c60048201611224565b03915afa8015610d8c576106fe916000916113275750612573565b611340915060203d602011610db957610dab8183610f79565b386112cd565b9591979493929060048710156108b857861580156118c2575b611891576113b293929161137a6113829260009b36916110c3565b9336916110c3565b93602094610495604051926113978885610f79565b8b8452604051946113a88987610f79565b8c865236916110c3565b97939892969150506113c53686856110c3565b936113e8610c7c60035473ffffffffffffffffffffffffffffffffffffffff1690565b906040517fed33378500000000000000000000000000000000000000000000000000000000815281818061141f8a600483016106ed565b0381865afa908115610d8c578591611874575b501561184c578360405180937f3b79a61e00000000000000000000000000000000000000000000000000000000825281806114708b600483016106ed565b03915afa918215610d8c578492611828575b50610100820192835182815191012096606061149d836111d6565b600283036117f357506114d06114cc6114b461202a565b85870151906020815191012090602081519101201490565b1590565b6117cb576114fa6114cc60808601516114e7612065565b6020815191012090602081519101201490565b6117a35760c084015161150e918c8c612892565b611530610c7c60025473ffffffffffffffffffffffffffffffffffffffff1690565b90604051907fb13bf2900000000000000000000000000000000000000000000000000000000082528382806115688460048301611238565b0381865afa918215610d8c57849261158791899161178c575b50612297565b9283516116b4575b6115c8935060405180809581947fb13bf2900000000000000000000000000000000000000000000000000000000083526004830161120a565b03915afa8015610d8c576115e29186916116975750612297565b80519093901561166f576115fe859151604051918280926120b7565b039060025afa15610d8c5761161e916114cc9160e0855191015190612aed565b6116475750916116419161163c6106fe96959461137a87878b610fbf565b6120ce565b93612182565b807fe7ef341f0000000000000000000000000000000000000000000000000000000060049252fd5b6004857fcd69d374000000000000000000000000000000000000000000000000000000008152fd5b6116ae9150833d8511610db957610dab8183610f79565b38611581565b9161171391936116dc610c7c60045473ffffffffffffffffffffffffffffffffffffffff1690565b87516040518095819482937fcedb9781000000000000000000000000000000000000000000000000000000008452600484016120a0565b03915afa908115610d8c57879161175f575b506117325781839161158f565b83517f167c231a000000000000000000000000000000000000000000000000000000008752600452602486fd5b61177f9150843d8611611785575b6117778183610f79565b810190611e86565b38611725565b503d61176d565b6116ae9150843d8611610db957610dab8183610f79565b6004867f92ec707e000000000000000000000000000000000000000000000000000000008152fd5b6004867f1e7ab599000000000000000000000000000000000000000000000000000000008152fd5b6117fc836111d6565b60018314611811575b6114cc6114d0916114b4565b506114d06114cc611820611fef565b915050611805565b6118459192503d8086833e61183d8183610f79565b810190611ee0565b9038611482565b6004847fdba942a2000000000000000000000000000000000000000000000000000000008152fd5b61188b9150823d8411611785576117778183610f79565b38611432565b6118be877f9849e774000000000000000000000000000000000000000000000000000000006000526111ed565b6000fd5b506118cc876111d6565b6003871461135f565b927fffffffffffffffffffffffffffffffff000000000000000000000000000000007fffff000000000000000000000000000000000000000000000000000000000000929383604051958360208801987f5b8e7b4e000000000000000000000000000000000000000000000000000000008a5216602488015216603486015216603684015216604682015260288152611071604882610f79565b6104959461199a6119aa946119926119a2946119b29e9c9b969d989d36916110c3565b9b36916110c3565b9636916110c3565b9536916110c3565b9436916110c3565b93926119c5610c2c868387969596610fbf565b5115611a81576119d4936118d5565b73ffffffffffffffffffffffffffffffffffffffff6000541691823b15610127576044600092837fffffffffffffffffffffffffffffffffffff00000000000000000000000000009560405196879586947faf9307f500000000000000000000000000000000000000000000000000000000865260048601521660248401525af18015610d8c57611a66575b50600090565b80611a756000611a7b93610f79565b8061011c565b38611a60565b7f82fba2950000000000000000000000000000000000000000000000000000000060005260046000fd5b90919293946000956000956000956000956000956020815114611bf3575b506004815114611bda575b506020815114611b8a575b506004815114611b48575b506024815114611af75750565b6106fe919250611b09611b20916124a4565b71ffffffffffffffffffffffffffffffffffff1690565b60701b7fffffffffffffffffffffffffffffffffffff00000000000000000000000000001690565b611b83919450611b5a61ffff916124a4565b1660f01b7fffff0000000000000000000000000000000000000000000000000000000000001690565b9238611aea565b611bd3919650611baa6fffffffffffffffffffffffffffffffff916124a4565b1660801b7fffffffffffffffffffffffffffffffff000000000000000000000000000000001690565b9438611adf565b611bec919850611b5a61ffff916124a4565b9638611ad4565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000919a50611c316fffffffffffffffffffffffffffffffff916124a4565b1660801b169838611ac9565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000604460009273ffffffffffffffffffffffffffffffffffffffff8454167fffff00000000000000000000000000000000000000000000000000000000000060405196879586947fa192c81d0000000000000000000000000000000000000000000000000000000086521660048501521660248301525afa908115610d8c57600091611ce7575090565b3d8083833e611cf68183610f79565b810190602081830312611d815780519067ffffffffffffffff8211611d85570181601f82011215611d8157805190611d2d8261110f565b93611d3b6040519586610f79565b82855260208086019360051b830101938411611d7e5750602001905b828210611d645750505090565b602080918351611d73816101dc565b815201910190611d57565b80fd5b8280fd5b8380fd5b90815191604051926022600285019482800186526f30313233343536373839616263646566600f5201908201915b828103611dcc57506000815260200160405250565b60016002910191600f835116516001820153600f835160041c165181530190611db7565b602073ffffffffffffffffffffffffffffffffffffffff60005416916024604051809481937f1d345bc600000000000000000000000000000000000000000000000000000000835260048301525afa908115610d8c57600091611e51575090565b90506020813d602011611e7e575b81611e6c60209383610f79565b8101031261012757516106fe816101dc565b3d9150611e5f565b90816020910312610127575180151581036101275790565b81601f820112156101275760208151910190611eb981611089565b92611ec76040519485610f79565b81845281830111610127576106fe916020840190610292565b6020818303126101275780519067ffffffffffffffff821161012757016101208183031261012757611f10611077565b9181518352602082015167ffffffffffffffff81116101275781611f35918401611e9e565b60208401526040820151604084015260608201516060840152608082015167ffffffffffffffff81116101275781611f6e918401611e9e565b608084015260a082015167ffffffffffffffff81116101275781611f93918401611e9e565b60a084015260c082015160c084015260e082015167ffffffffffffffff81116101275781611fc2918401611e9e565b60e084015261010082015167ffffffffffffffff811161012757611fe69201611e9e565b61010082015290565b60405190611ffe604083610f79565b601a82527f496e74656c205347582050434b2050726f636573736f722043410000000000006020830152565b60405190612039604083610f79565b601982527f496e74656c205347582050434b20506c6174666f726d204341000000000000006020830152565b60405190612074604083610f79565b601982527f496e74656c205347582050434b204365727469666963617465000000000000006020830152565b6040906106fe9392815281602082015201906102b5565b906120ca60209282815194859201610292565b0190565b6040919261213391600073ffffffffffffffffffffffffffffffffffffffff815416928551968795869485937f5778ea3200000000000000000000000000000000000000000000000000000000855260048501526060602485015260648401906102b5565b90604483015203925af1908115610d8c5760009161214f575090565b6040813d60401161217a575b8161216860409383610f79565b810103126121765751919050565b5080fd5b3d915061215b565b909173ffffffffffffffffffffffffffffffffffffffff60005416803b1561012757600092836064927fffffffffffffffffffffffffffffffffffff00000000000000000000000000007fffffffffffffffffffffffffffffffff00000000000000000000000000000000957fffff000000000000000000000000000000000000000000000000000000000000604051998a9889977faa1b52950000000000000000000000000000000000000000000000000000000089521660048801521660248601521660448401525af18015610d8c5761225b5750565b8061226860008093610f79565b80031261012757565b9060208282031261012757815167ffffffffffffffff8111610127576106fe9201611e9e565b60206122f8916122bf610c7c60005473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947f7fc1ca02000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa908115610d8c5761236c916000918291612397575b50612333610c7c835473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947f9e5464b2000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa908115610d8c57600091612382575090565b6106fe91503d806000833e610d7d8183610f79565b6123b0915060203d602011610db957610dab8183610f79565b38612311565b901561243e5760206122f8916123e4610c7c60005473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947fe973fddc000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b612333610c7c835473ffffffffffffffffffffffffffffffffffffffff1690565b6020612466916122bf610c7c60005473ffffffffffffffffffffffffffffffffffffffff1690565b03915afa908115610d8c5761236c916000918291612485575b5061241d565b61249e915060203d602011610db957610dab8183610f79565b3861247f565b90600082517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821160208087015160f01c17613078141660011b915b7403010a071000000b0104040208000c05090d060e0f6d03e4088843e41bac00000000000060ff6001808701968a010151161c601f161a908460fc1c82151715029360041b0101908281101561255b5790917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906124e2565b5092501561256557565b63101827966000526004601cfd5b9060609161259f610c7c610c7c610c7c60005473ffffffffffffffffffffffffffffffffffffffff1690565b604051907f5c975abb000000000000000000000000000000000000000000000000000000008252602082600481845afa918215610d8c5760009261266b575b5081156125fc575b506125ee5750565b6106fe9192506000906123b6565b6040517f59d14b410000000000000000000000000000000000000000000000000000000081523360048201529150602090829060249082905afa908115610d8c5760009161264c575b50386125e6565b612665915060203d602011611785576117778183610f79565b38612645565b61268591925060203d602011611785576117778183610f79565b90386125de565b9060808282031261012757815161ffff811681036101275792602083015167ffffffffffffffff811161012757830182601f820112156101275780516126d18161110f565b916126df6040519384610f79565b81835260208084019260051b8201019085821161012757602001915b8183106127455750505092604081015167ffffffffffffffff81116101275783612726918301611e9e565b92606082015167ffffffffffffffff8111610127576106fe9201611e9e565b825160ff81168103610127578152602092830192016126fb565b9291906127766020916040865260408601906102b5565b930152565b90602082519201517fffff000000000000000000000000000000000000000000000000000000000000811692600281106127b3575050565b7fffff000000000000000000000000000000000000000000000000000000000000929350829060020360031b1b161690565b60207fff000000000000000000000000000000000000000000000000000000000000009161281c6001959482815194859201610292565b019160f81b1681520190565b90602082519201517fffffffffffffffffffffffffffffffffffff000000000000000000000000000081169260128110612860575050565b7fffffffffffffffffffffffffffffffffffff0000000000000000000000000000929350829060120360031b1b161690565b926000906128f49592936128be610c7c60035473ffffffffffffffffffffffffffffffffffffffff1690565b906040518098819482937fe81c707e0000000000000000000000000000000000000000000000000000000084526004840161275f565b03915afa928315610d8c57600093600095600091612a89575b50612981612986927fffff000000000000000000000000000000000000000000000000000000000000806129436105639561277b565b921691161495604051928391602083017fffff00000000000000000000000000000000000000000000000000000000000060029260f01b1681520190565b612c0e565b9260009260605b86518510156129cb576001906129c36129b06129a9888b6111bd565b5160ff1690565b91610563604051938492602084016127e5565b94019361298d565b7fffffffffffffffffffffffffffffffffffff0000000000000000000000000000939650612a1f919450612a1a612a1491610563612a44959860405194859360208501906120b7565b906120b7565b612828565b7fffffffffffffffffffffffffffffffffffff00000000000000000000000000001690565b911614811591612a80575b50612a5657565b7f4a629e240000000000000000000000000000000000000000000000000000000060005260046000fd5b90501538612a4f565b7fffff0000000000000000000000000000000000000000000000000000000000009650612943955061056391506129869287612ada612981933d806000833e612ad28183610f79565b81019061268c565b9b92905099909a9550505050925061290d565b91906040815103612b7a576000612b549273ffffffffffffffffffffffffffffffffffffffff80600154161660405180809681947f6d3537a000000000000000000000000000000000000000000000000000000000835260206004840181815201906102b5565b03915afa918215610d8c57600092612b82575b506040825103612b7a576106fe92612d51565b505050600090565b612b989192503d806000833e610d7d8183610f79565b9038612b67565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6020039060208211612bdc57565b612b9f565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211612bdc57565b805160609291815b612c1e575050565b90927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840193808511612bdc5782518510156111d157600160207fff00000000000000000000000000000000000000000000000000000000000000601f612cd2948701015116936040519481612c9d8793518092868087019101610292565b8201908382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810184520182610f79565b929081612c16565b602081519101519060208110612cee575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b15612d2257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008091612e2693600195612d79612d6e612d73612d6e85612e35565b612cda565b93612f43565b90612d92612d6e612d8c612d6e84612e35565b92612f43565b91604051936020850195865260408501526060840152608083015260a082015260a08152612dc160c082610f79565b51907f00000000000000000000000000000000000000000000000000000000000000005afa3d15612e2a57612e173d91612dfa83611089565b92612e086040519485610f79565b83523d6000602085013e612d1b565b602080825183010191016111fb565b1490565b612e17606091612d1b565b805160201161012757612e486020611089565b90612e566040519283610f79565b60208252612e646020611089565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237602080920190915b6020811015612ef55780612ed657507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b612eea612ee5612eef92612bce565b613007565b612be1565b90612ec8565b90918251815260208101809111612bdc579160208101809111612bdc57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115612e9657612b9f565b805160401161012757612f566020611089565b90612f646040519283610f79565b60208252612f726020611089565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060400160205b6020811015612fb95780612ed657509192915050565b90918251815260208101809111612bdc579160208101809111612bdc57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115612fa357612b9f565b601f8111612bdc576101000a9056fea2646970667358221220f848ffd475ca8233b7772cb538bc941dd0e2de94d8bf9de2271909d00dab9b2164736f6c634300081b00330000000000000000000000002bbc0ccc218e63ad4d2bbb7bde1375b092fd38a2000000000000000000000000cf171acd6c0a776f9d3e1f6cac8067c982ac6ce100000000000000000000000000000000000000000000000000000000000001000000000000000000000000004aca9c0eb063401c9f5c2fc4487dbc5ccf1c9e2b0000000000000000000000006e204feae40f668a06e78a83b66185ffc8892dda", + "nonce": "0x6", "chainId": "0x1555e3" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x306c3da8a22fd06f33d983fefd092c43139dc5e9ee9685b568c06548bf8cc4a4", + "hash": "0x02d069ec2905be61189e9bc671d959eac1a1c2806465fc319914d94ce7287b33", "transactionType": "CREATE", "contractName": "AutomataEnclaveIdentityDao", - "contractAddress": "0x00f6da18cf3f717de55e3aecc71a3b47daece967", + "contractAddress": "0x45f91c0d9cf651785d93fcf7e9e97de952cdb910", "function": null, "arguments": [ - "0xbDAF40FbfEA4596f129bD11d273c3Eb64d3B4c62", - "0x15C702f2c01C109B3261EfFB0A6a48de0F3cEAE5", - "0xfd4a34b578B352FE1896CDafaEb0f45f993352Bf", - "0x5213c0e3Ab478dbc83E8afFF8909717332E4f8E1" + "0x2bBc0Ccc218E63Ad4D2bbb7bdE1375B092FD38a2", + "0x0000000000000000000000000000000000000100", + "0xcf171ACd6c0a776f9d3E1F6Cac8067c982Ac6Ce1", + "0xae27D762EED6958bc34b358bd7C78c7211fe77F8", + "0x4Aca9C0EB063401C9F5c2Fc4487DBC5ccF1C9E2B" ], "transaction": { - "from": "0xdc3bda6d40f0e33e0dfa4aef9604b66195e6c5dc", - "gas": "0x22c1f2", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", + "gas": "0x20f882", "value": "0x0", - "input": "0x608034620000f557601f62001dd838819003918201601f19168301916001600160401b03831184841017620000fa57808492608094604052833981010312620000f5576200004d8162000110565b906200005c6020820162000110565b90620000796060620000716040840162000110565b920162000110565b60018060a01b03928380928160018060a01b0319971687600054161760005516856001541617600155168360025416176002551690600354161760035533638b78c6d819553360007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3604051611cb29081620001268239f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620000f55756fe6080604052600436101561001257600080fd5b60003560e01c80630cac637814610137578063256929621461013257806330f704ea1461012d5780633e2b584c1461012857806354d1f13d146101235780635e3d47111461011e57806361d20bea14610119578063715018a6146101145780637ecda5f01461010f5780638da5cb5b1461010a578063b414d0b214610105578063bf721aaf14610100578063d88d1df6146100fb578063ec950d33146100f6578063f04e283e146100f1578063f0f074f7146100ec578063f2fde38b146100e75763fee81cf4146100e257600080fd5b610b48565b610b17565b610a18565b61097e565b61092c565b6108da565b6108c2565b610895565b610824565b6106f7565b6105e9565b610597565b610571565b6104dc565b610482565b6101e3565b610176565b346101715760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017157602060405160008152f35b600080fd5b6000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e05763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b80fd5b34610171577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60608136011261017157600435906024359060443567ffffffffffffffff811161017157806004016040809383360301126101715761027961026060025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b83517f974ddd9500000000000000000000000000000000000000000000000000000000815260036004820152602093918490829060249082905afa80156103da576102cc91600091610408575b50610de2565b908360006102da8580610b70565b906102e9895180938193610bc1565b039060025afa156103da576103209161031c9161031661030f6024600051930187610b70565b3691611094565b906117cb565b1590565b6103df5781600061033c61033584888a61139e565b9380610b70565b9061034b875180938193610bc1565b039060025afa156103da576103d6946103b49461036e6103c793600051906115d8565b855194850192835260208301919091529485939081604084015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610c77565b5190206000526004602052604060002090565b55519081529081906020820190565b0390f35b610bcf565b600483517f8de7233f000000000000000000000000000000000000000000000000000000008152fd5b6104289150853d871161042e575b6104208183610c77565b810190610cb8565b386102c6565b503d610416565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60209101126101715760043573ffffffffffffffffffffffffffffffffffffffff811681036101715790565b346101715773ffffffffffffffffffffffffffffffffffffffff6104a536610435565b6104ad6116fd565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006002541617600255600080f35b6000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e05763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60209101126101715760043590565b346101715761057f36610541565b60005260046020526020604060002054604051908152f35b346101715760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017157602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b6000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e05761061c6116fd565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b60005b83811061067c5750506000910152565b818101518382015260200161066c565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936106c881518092818752878088019101610669565b0116010190565b90916106e66106f49360408452604084019061068c565b91602081840391015261068c565b90565b346101715760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101715761074861026060025473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f974ddd95000000000000000000000000000000000000000000000000000000008082526003600483015260209290918381602481855afa9283156103da578491600094610805575b506040519081526000600482015291829060249082905afa9283156103da576000936107de575b836107ce6107c885610de2565b91610de2565b906103d6604051928392836106cf565b6107ce9293506107c891816107fe92903d1061042e576104208183610c77565b92916107bb565b61081d919450823d841161042e576104208183610c77565b9238610794565b346101715760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101715760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b34610171576103d66108ae6108a936610541565b610de2565b60405191829160208352602083019061068c565b346101715760206108d236610541565b604051908152f35b346101715760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017157602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346101715760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017157602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b61098736610435565b61098f6116fd565b63389a75e1600c52806000526020600c2090815442116109b75760006109b59255611735565b005b636f5e88186000526004601cfd5b906106f4916020815260206109e58351604083850152606084019061068c565b9201519060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08285030191015261068c565b346101715760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017157604051610a5381610c0a565b606081526020908181019160608352610a70602435600435611797565b80610a84575b604051806103d685826109c5565b610a8d90610de2565b92835184019360608184870196031261017157828101519467ffffffffffffffff95868111610171578185610ac492850101610fa6565b50604082015186811161017157820181603f82011215610171578181604087610af09401519101610d6d565b936060830151968711610171576103d696610b0c930101610da2565b905281523880610a76565b610b2036610435565b610b286116fd565b8060601b15610b3a576109b590611735565b637448fbae6000526004601cfd5b3461017157610b5636610435565b63389a75e1600c52600052602080600c2054604051908152f35b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610171570180359067ffffffffffffffff82116101715760200191813603831361017157565b908092918237016000815290565b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610c2657604052565b610bdb565b6060810190811067ffffffffffffffff821117610c2657604052565b67ffffffffffffffff8111610c2657604052565b60c0810190811067ffffffffffffffff821117610c2657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610c2657604052565b90816020910312610171575190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60405190610180820182811067ffffffffffffffff821117610c2657604052565b60405190610d2482610c5b565b565b60405190610d2482610c0a565b67ffffffffffffffff8111610c2657601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b90929192610d7a81610d33565b91610d886040519384610c77565b829482845282820111610171576020610d24930190610669565b9080601f830112156101715781516106f492602001610d6d565b9060208282031261017157815167ffffffffffffffff8111610171576106f49201610da2565b600073ffffffffffffffffffffffffffffffffffffffff815416916024604051809481937f03f2c7da00000000000000000000000000000000000000000000000000000000835260048301525afa9081156103da57600091610e42575090565b6106f491503d806000833e610e578183610c77565b810190610dbc565b5190600382101561017157565b519063ffffffff8216820361017157565b519067ffffffffffffffff8216820361017157565b51907fffffffff000000000000000000000000000000000000000000000000000000008216820361017157565b51907fffffffffffffffffffffffffffffffff000000000000000000000000000000008216820361017157565b519061ffff8216820361017157565b81601f8201121561017157805190602067ffffffffffffffff8311610c265760409360405194610f30838660051b0187610c77565b8486528286019183606080970286010194818611610171578401925b858410610f5d575050505050505090565b868483031261017157825190610f7282610c2b565b610f7b85610eec565b825285850151868301528385015190600482101561017157828792868b950152815201930192610f4c565b91906101808382031261017157610fbb610cf6565b92610fc581610e5f565b8452610fd360208201610e6c565b6020850152610fe460408201610e7d565b6040850152610ff560608201610e7d565b606085015261100660808201610e6c565b608085015261101760a08201610e92565b60a085015261102860c08201610e92565b60c085015261103960e08201610ebf565b60e085015261010061104c818301610ebf565b908501526101208082015190850152610140611069818301610eec565b90850152610160918282015167ffffffffffffffff81116101715761108e9201610efb565b90830152565b9291926110a082610d33565b916110ae6040519384610c77565b829481845281830111610171578281602093846000960137010152565b604051906110d882610c0a565b8160008082526040519160c083019183831067ffffffffffffffff841117610c265760209260405280845280838501528060408501528060608501526060608085015260a08401520152565b9060208282031261017157815167ffffffffffffffff8111610171576106f49201610fa6565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9160206106f493818152019161114a565b600311156111a457565b610cc7565b9060038210156111a45752565b90815180825260208080930193019160005b8281106111d6575050505090565b90919293845161ffff815116825283810151848301526040809101519060048210156111a4578201526060019382019291906001016111c8565b93916106f4959361138261139093606088526112306060890182516111a9565b602081015163ffffffff166080890152604081015167ffffffffffffffff1660a0890152606081015167ffffffffffffffff1660c0890152608081015163ffffffff1660e08901528760a0820151916112b061010093848401907fffffffff00000000000000000000000000000000000000000000000000000000169052565b61136e60c08201516112e961012091828601907fffffffff00000000000000000000000000000000000000000000000000000000169052565b61135160e08401519561132361014097888801907fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b8401517fffffffffffffffffffffffffffffffff000000000000000000000000000000001661016095860152565b8201519361018094858d01528201516101a08c019061ffff169052565b0151906101c08901526101e08801906111b6565b91868303602088015261114a565b92604081850391015261114a565b91906113b661141f916113af6110cb565b5084611797565b916113d961026060035473ffffffffffffffffffffffffffffffffffffffff1690565b9360006113e68380610b70565b909660409788518097819482937fc0ed977300000000000000000000000000000000000000000000000000000000845260048401611189565b03915afa9283156103da576000936115b5575b5082519061143f8261119a565b6114488261119a565b0361158c576114716114648584015167ffffffffffffffff1690565b67ffffffffffffffff1690565b4210801561156c575b611543576114f460606114a994936114e5846114b961149c8261151d98610b70565b9990926020810190610b70565b908b519a8b948760208701611210565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101885287610c77565b015167ffffffffffffffff1690565b93611515611500610d17565b3381529567ffffffffffffffff166020870152565b840160019052565b60608301526080820152600060a0820152611536610d26565b9060008252602082015290565b600484517f9ac04499000000000000000000000000000000000000000000000000000000008152fd5b50611585611464606084015167ffffffffffffffff1690565b421161147a565b600484517f289fa0cb000000000000000000000000000000000000000000000000000000008152fd5b6115d191933d8091833e6115c98183610c77565b810190611124565b9138611432565b602001606081510151906115eb82610de2565b5161167f575b6080915051015173ffffffffffffffffffffffffffffffffffffffff60005416803b15610171576116646000929183926040519485809481937f3a91c22600000000000000000000000000000000000000000000000000000000835289600484015260406024840152604483019061068c565b03925af180156103da57611676575090565b6106f490610c47565b73ffffffffffffffffffffffffffffffffffffffff6000541691823b15610171576000926024849260405195869384927f86911cde00000000000000000000000000000000000000000000000000000000845260048401525af19182156103da576080926116ee575b506115f1565b6116f790610c47565b386116e8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754330361172757565b6382b429006000526004601cfd5b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b604080516020810192835290810192909252906117b78160608101610388565b519020600052600460205260406000205490565b929190926040808551036119f857906118399173ffffffffffffffffffffffffffffffffffffffff60015416938151907f6d3537a00000000000000000000000000000000000000000000000000000000082528160209687600483015281806000988995602483019061068c565b03915afa9081156103da5784916119de575b50818151036119d55761186561186088611ad7565b611a01565b90875183116119d157825161187981610c0a565b86815286810187368237988401875b8881101561197f578796949260019a9b889795936118e39361195c9c9b50801560001461196057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b5182518216911916179052611a01565b6118fb6118606118f561186085611ad7565b93611ba3565b928451948986019687528501526060840152608083015260a082015260a0815261192481610c5b565b519073c2b78104907f722dabac4c69f826a522b2754de45afa9061194f611949611a42565b92611a72565b8082518301019101610cb8565b1490565b61197461196f61197992611c32565b611c6d565b611c40565b906118d3565b99815181528881018091116119cc57908881018091116119cc57997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081116119cc57999099611888565b611aa8565b8480fd5b50919450505050565b6119f291503d8086833e610e578183610c77565b3861184b565b50600093505050565b602081519101519060208110611a15575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b3d15611a6d573d90611a5382610d33565b91611a616040519384610c77565b82523d6000602084013e565b606090565b15611a7957565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b805160209081116101715760405191611aef83610c0a565b81835281830190823683378280910191925b80821015611b56575080611b4157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b61197461196f611b5092611c32565b90611b33565b909192835181528181018091116119cc57928181018091116119cc57917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081116119cc5790611b01565b80516040116101715760405190611bb982610c0a565b6020908183528183019082368337604083910191925b80821015611be5575080611b4157509192915050565b909192835181528181018091116119cc57928181018091116119cc57917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081116119cc5790611bcf565b60200390602082116119cc57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116119cc57565b601f81116119cc576101000a9056fea26469706673582212202a81c2d659c186ca1b496a9a5cffefbffe2df077682aeb485674e53d2ba8d22164736f6c63430008180033000000000000000000000000bdaf40fbfea4596f129bd11d273c3eb64d3b4c6200000000000000000000000015c702f2c01c109b3261effb0a6a48de0f3ceae5000000000000000000000000fd4a34b578b352fe1896cdafaeb0f45f993352bf0000000000000000000000005213c0e3ab478dbc83e8afff8909717332e4f8e1", - "nonce": "0x5", + "input": "0x60a0346100eb57601f611ca738819003918201601f19168301916001600160401b038311848410176100f05780849260a0946040528339810103126100eb5761004781610106565b61005360208301610106565b9061006060408401610106565b91610079608061007260608701610106565b9501610106565b600080546001600160a01b03199081166001600160a01b039586161790915560809290925260018054831691841691909117905560028054821693831693909317909255600380549092169216919091179055604051611b8c908161011b823960805181818161039801526118820152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036100eb5756fe6080604052600436101561001257600080fd5b60003560e01c806304f3bcec146100c757806330f704ea146100c2578063536c633d146100bd57806361d20bea146100b85780637ecda5f0146100b3578063b414d0b2146100ae578063bf721aaf146100a9578063ca108769146100a4578063d88d1df61461009f578063ec950d331461009a5763f0f074f71461009557600080fd5b6108b9565b610814565b6107c2565b610783565b61062e565b610601565b61049c565b6103bc565b61034d565b61011e565b346101195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011957602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b600080fd5b346101195760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101195760043560443560243567ffffffffffffffff821161011957816004019160407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112610119576101d16101b860025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b602060405180927fb13bf29000000000000000000000000000000000000000000000000000000000825281806102166004820190600060206040840193600381520152565b03915afa80156102ef576102329160009161031e575b506113af565b906020600061024186806109ca565b9061025160405180938193610a1b565b039060025afa156102ef57610288916102849161027e61027760246000519301886109ca565b3691610e41565b906115bc565b1590565b6102f45760006102af6102a884846102a260209689610b20565b976110d2565b93806109ca565b906102bf60405180938193610a1b565b039060025afa156102ef576102eb916102db91600051906112d5565b6040519081529081906020820190565b0390f35b610a29565b7f8de7233f0000000000000000000000000000000000000000000000000000000060005260046000fd5b610340915060203d602011610346575b6103388183610aa1565b810190610ae2565b3861022c565b503d61032e565b346101195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011957602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b60005b8381106104215750506000910152565b8181015183820152602001610411565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361046d8151809281875287808801910161040e565b0116010190565b909161048b61049993604084526040840190610431565b916020818403910152610431565b90565b346101195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610119576104ed6101b860025473ffffffffffffffffffffffffffffffffffffffff1690565b6040517fb13bf2900000000000000000000000000000000000000000000000000000000081526003600482015260006024820152602081604481855afa80156102ef57610542916000916105b2575b5061166e565b90602060405180927fb13bf290000000000000000000000000000000000000000000000000000000008252818061058760048201906000602060408401938281520152565b03915afa80156102ef576105a2916000916105b2575061166e565b906102eb60405192839283610474565b6105cb915060203d602011610346576103388183610aa1565b3861053c565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60209101126101195760043590565b34610119576102eb61061a610615366105d1565b6113af565b604051918291602083526020830190610431565b346101195761069e61063f366105d1565b60206000916106656101b8845473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809681947fe973fddc000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9182156102ef576107119282918291610764575b506106d86101b8835473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809681947f9e5464b2000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa80156102ef57602092826107399392610741575b5050828082518301019101610ae2565b604051908152f35b61075d92503d8091833e6107558183610aa1565b810190611389565b3880610729565b61077d915060203d602011610346576103388183610aa1565b386106b6565b346101195760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610119576020610739602435600435610b20565b346101195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011957602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346101195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011957602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b906104999160208152602061088683516040838501526060840190610431565b9201519060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082850301910152610431565b346101195760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610119576004356024356109186109136040519261090184610a64565b60608452602084019460608652610b20565b61166e565b9182518061092f575b604051806102eb8582610866565b8301906060846020840193031261011957602084015167ffffffffffffffff81116101195782602061096392870101610cc6565b50604084015167ffffffffffffffff811161011957840182603f82011215610119578281604060206109989401519101610df2565b9160608501519067ffffffffffffffff82116101195760206109bf926102eb970101610e27565b905281523880610921565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610119570180359067ffffffffffffffff82116101195760200191813603831361011957565b908092918237016000815290565b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610a8057604052565b610a35565b6060810190811067ffffffffffffffff821117610a8057604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610a8057604052565b90816020910312610119575190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b906040519060208201927fff818fce0000000000000000000000000000000000000000000000000000000084526024830152604482015260448152610b66606482610aa1565b51902090565b60405190610b7c61018083610aa1565b565b5190600382101561011957565b519063ffffffff8216820361011957565b519067ffffffffffffffff8216820361011957565b51907fffffffff000000000000000000000000000000000000000000000000000000008216820361011957565b51907fffffffffffffffffffffffffffffffff000000000000000000000000000000008216820361011957565b519061ffff8216820361011957565b81601f820112156101195780519067ffffffffffffffff8211610a805760405192610c4b60208460051b0185610aa1565b8284526020606081860194028301019181831161011957602001925b828410610c75575050505090565b6060848303126101195760405190610c8c82610a85565b610c9585610c0b565b8252602085015160208301526040850151906004821015610119578260209260406060950152815201930192610c67565b9190916101808184031261011957610cdc610b6c565b92610ce682610b7e565b8452610cf460208301610b8b565b6020850152610d0560408301610b9c565b6040850152610d1660608301610b9c565b6060850152610d2760808301610b8b565b6080850152610d3860a08301610bb1565b60a0850152610d4960c08301610bb1565b60c0850152610d5a60e08301610bde565b60e0850152610d6c6101008301610bde565b610100850152610120820151610120850152610d8b6101408301610c0b565b61014085015261016082015167ffffffffffffffff811161011957610db09201610c1a565b610160830152565b67ffffffffffffffff8111610a8057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b90929192610dff81610db8565b91610e0d6040519384610aa1565b829482845282820111610119576020610b7c93019061040e565b9080601f8301121561011957815161049992602001610df2565b929192610e4d82610db8565b91610e5b6040519384610aa1565b829481845281830111610119578281602093846000960137010152565b9060208282031261011957815167ffffffffffffffff8111610119576104999201610cc6565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916020610499938181520191610e9e565b60031115610ef857565b610af1565b906003821015610ef85752565b90602080835192838152019201906000905b808210610f295750505090565b9091926040845161ffff8151168352602081015160208401520151906004821015610ef85760608160019360406020940152019401920190610f1c565b939161049995936110b66101606110c49460608952610f8960608a018251610efd565b602081015163ffffffff1660808a0152604081015167ffffffffffffffff1660a08a0152606081015167ffffffffffffffff1660c08a0152608081015163ffffffff1660e08a015260a08101517fffffffff00000000000000000000000000000000000000000000000000000000166101008a015260c08101517fffffffff00000000000000000000000000000000000000000000000000000000166101208a015260e08101517fffffffffffffffffffffffffffffffff00000000000000000000000000000000166101408a01526101008101517fffffffffffffffffffffffffffffffff0000000000000000000000000000000016898301526101208101516101808a015261014081015161ffff166101a08a015201516101806101c08901526101e0880190610f0a565b918683036020880152610e9e565b926040818503910152610e9e565b9061113c9160006110fb6101b860035473ffffffffffffffffffffffffffffffffffffffff1690565b61110586806109ca565b91906040518097819482937fc0ed977300000000000000000000000000000000000000000000000000000000845260048401610edd565b03915afa9283156102ef576000936112b2575b50825161115b81610eee565b61116481610eee565b810361128857600214908161127c575b506112525761119e611191604083015167ffffffffffffffff1690565b67ffffffffffffffff1690565b42108015611232575b61120857610499906111dc6111cc6111bf85806109ca565b91909560208101906109ca565b9160405196879560208701610f66565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610aa1565b7f9ac044990000000000000000000000000000000000000000000000000000000060005260046000fd5b5061124b611191606083015167ffffffffffffffff1690565b42116111a7565b7f4e0f56960000000000000000000000000000000000000000000000000000000060005260046000fd5b60049150141538611174565b7f289fa0cb0000000000000000000000000000000000000000000000000000000060005260046000fd5b6112ce91933d8091833e6112c68183610aa1565b810190610e78565b913861114f565b6040919261133a91600073ffffffffffffffffffffffffffffffffffffffff815416928551968795869485937f5778ea320000000000000000000000000000000000000000000000000000000085526004850152606060248501526064840190610431565b90604483015203925af19081156102ef57600091611356575090565b6040813d604011611381575b8161136f60409383610aa1565b8101031261137d5751919050565b5080fd5b3d9150611362565b9060208282031261011957815167ffffffffffffffff8111610119576104999201610e27565b6020611410916113d76101b860005473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947f7fc1ca02000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9081156102ef576114849160009182916114af575b5061144b6101b8835473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947f9e5464b2000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9081156102ef5760009161149a575090565b61049991503d806000833e6107558183610aa1565b6114c8915060203d602011610346576103388183610aa1565b38611429565b9015611556576020611410916114fc6101b860005473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947fe973fddc000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b61144b6101b8835473ffffffffffffffffffffffffffffffffffffffff1690565b602061157e916113d76101b860005473ffffffffffffffffffffffffffffffffffffffff1690565b03915afa9081156102ef5761148491600091829161159d575b50611535565b6115b6915060203d602011610346576103388183610aa1565b38611597565b919060408151036116495760006116239273ffffffffffffffffffffffffffffffffffffffff80600154161660405180809681947f6d3537a00000000000000000000000000000000000000000000000000000000083526020600484018181520190610431565b03915afa9182156102ef57600092611651575b506040825103611649576104999261180e565b505050600090565b6116679192503d806000833e6107558183610aa1565b9038611636565b9060609161169a6101b86101b86101b860005473ffffffffffffffffffffffffffffffffffffffff1690565b604051907f5c975abb000000000000000000000000000000000000000000000000000000008252602082600481845afa9182156102ef57600092611776575b5081156116f7575b506116e95750565b6104999192506000906114ce565b6040517f59d14b410000000000000000000000000000000000000000000000000000000081523360048201529150602090829060249082905afa9081156102ef57600091611747575b50386116e1565b611769915060203d60201161176f575b6117618183610aa1565b8101906118f2565b38611740565b503d611757565b61179091925060203d60201161176f576117618183610aa1565b90386116d9565b6020815191015190602081106117ab575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b156117df57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080916118e39360019561183661182b61183061182b85611939565b611797565b93611a48565b9061184f61182b61184961182b84611939565b92611a48565b91604051936020850195865260408501526060840152608083015260a082015260a0815261187e60c082610aa1565b51907f00000000000000000000000000000000000000000000000000000000000000005afa3d156118e7576118d43d916118b783610db8565b926118c56040519485610aa1565b83523d6000602085013e6117d8565b60208082518301019101610ae2565b1490565b6118d46060916117d8565b90816020910312610119575180151581036101195790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80516020116101195761194c6020610db8565b9061195a6040519283610aa1565b602082526119686020610db8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237602080920190915b60208110156119f957806119da57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b6119ee6119e96119f392611b0c565b611b47565b611b1a565b906119cc565b90918251815260208101809111611a43579160208101809111611a4357907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561199a575b61190a565b805160401161011957611a5b6020610db8565b90611a696040519283610aa1565b60208252611a776020610db8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060400160205b6020811015611abe57806119da57509192915050565b90918251815260208101809111611a43579160208101809111611a4357907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115611aa85761190a565b6020039060208211611a4357565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211611a4357565b601f8111611a43576101000a9056fea2646970667358221220c161c112d9e4f30a1fcfde10ea58acc5535d7c3eabcd4034d025ee2d8bc4235864736f6c634300081b00330000000000000000000000002bbc0ccc218e63ad4d2bbb7bde1375b092fd38a20000000000000000000000000000000000000000000000000000000000000100000000000000000000000000cf171acd6c0a776f9d3e1f6cac8067c982ac6ce1000000000000000000000000ae27d762eed6958bc34b358bd7c78c7211fe77f80000000000000000000000004aca9c0eb063401c9f5c2fc4487dbc5ccf1c9e2b", + "nonce": "0x7", "chainId": "0x1555e3" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x0dc50193602b2d1872361d789ed9fc87857d6cde51d7d23057ed68a087b1c282", + "hash": "0x17cd2f4fc445661898e713c19f319f42756396f57a229cd520e87439ee2371e0", "transactionType": "CREATE", "contractName": "AutomataFmspcTcbDao", - "contractAddress": "0xc728dd0fcd76cd9166f66e1cd8002de86d6525b8", + "contractAddress": "0x9c54c72867b07caf2e6255ce32983c28afe40f26", "function": null, "arguments": [ - "0xbDAF40FbfEA4596f129bD11d273c3Eb64d3B4c62", - "0x15C702f2c01C109B3261EfFB0A6a48de0F3cEAE5", - "0xC2A662e08A35513596E22D0aC236Ce72e59125EE", - "0x5213c0e3Ab478dbc83E8afFF8909717332E4f8E1" + "0x2bBc0Ccc218E63Ad4D2bbb7bdE1375B092FD38a2", + "0x0000000000000000000000000000000000000100", + "0xcf171ACd6c0a776f9d3E1F6Cac8067c982Ac6Ce1", + "0x71056B540b4E60D0E8eFb55FAd487C486B09FFF5", + "0x4Aca9C0EB063401C9F5c2Fc4487DBC5ccF1C9E2B" ], "transaction": { - "from": "0xdc3bda6d40f0e33e0dfa4aef9604b66195e6c5dc", - "gas": "0x2dad59", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", + "gas": "0x2dc95a", "value": "0x0", - "input": "0x608034620000f557601f620027dd38819003918201601f19168301916001600160401b03831184841017620000fa57808492608094604052833981010312620000f5576200004d8162000110565b906200005c6020820162000110565b90620000796060620000716040840162000110565b920162000110565b60018060a01b03928380928160018060a01b0319971687600054161760005516856001541617600155168360025416176002551690600354161760035533638b78c6d819553360007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a36040516126b79081620001268239f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620000f55756fe6080604052600436101561001257600080fd5b60003560e01c806321c7a3211461014757806325692962146101425780633e2b584c1461013d5780634ba52fa51461013857806354d1f13d14610133578063715018a61461012e5780638da5cb5b14610129578063a53e727514610124578063a8349fb71461011f578063b414d0b21461011a578063bf721aaf14610115578063c9d55de414610110578063cb7a96661461010b578063cfbc42fb14610106578063d88d1df614610101578063ec950d33146100fc578063f04e283e146100f7578063f2fde38b146100f25763fee81cf4146100ed57600080fd5b610bbc565b610b8b565b610b44565b610af2565b610aa0565b610a18565b610147565b61099f565b610987565b61095a565b61062f565b6104d0565b6103d1565b610351565b6102ec565b61029a565b610240565b610186565b346101815760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018157602060405160008152f35b600080fd5b6000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f05763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b80fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60209101126101815760043573ffffffffffffffffffffffffffffffffffffffff811681036101815790565b346101815773ffffffffffffffffffffffffffffffffffffffff610263366101f3565b61026b6116ef565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006002541617600255600080f35b346101815760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018157602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b6000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f05763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b6000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f0576103846116ef565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b346101815760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101815760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60005b8381106104555750506000910152565b8181015183820152602001610445565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936104a181518092818752878088019101610442565b0116010190565b90916104bf6104cd93604084526040840190610465565b916020818403910152610465565b90565b346101815760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101815761053a61052160025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b6040517f974ddd95000000000000000000000000000000000000000000000000000000008082526003600483015260209290918381602481855afa92831561060b578491600094610610575b506040519081526000600482015291829060249082905afa92831561060b576000936105d4575b836105c06105ba85610e7d565b91610e7d565b906105d0604051928392836104a8565b0390f35b6105c09293506105ba91816105fd92903d10610604575b6105f58183610cb9565b810190610cfa565b92916105ad565b503d6105eb565b610d38565b610628919450823d8411610604576105f58183610cb9565b9238610586565b346101815760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc908082360112610181576004359167ffffffffffffffff8311610181578260040192604080928236030112610181576106a861052160025473ffffffffffffffffffffffffffffffffffffffff1690565b83835180927f974ddd9500000000000000000000000000000000000000000000000000000000825281806106e460048201906003602083019252565b03915afa801561060b57610700916000916108fc575b50610e7d565b9083600061070e8780610d44565b9061071d875180938193610d95565b039060025afa1561060b57610754916107509161074a6107436024600051930189610d44565b3691610efa565b90611ba8565b1590565b6108d35761077082600061076786611820565b93909680610d44565b9061077f865180938193610d95565b039060025afa1561060b576108c461079d6105d095600051906119d9565b93826108b18287950151926107b184610da3565b6107ba84610da3565b6108856107fa886107ee60c08701517fffffffffffff00000000000000000000000000000000000000000000000000001690565b95015163ffffffff1690565b88519485938401968791927fffffffffffff0000000000000000000000000000000000000000000000000000600b947fff000000000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000009460f81b16855216600184015260e01b1660078201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610cb9565b5190206000526004602052604060002090565b55519081529081906020820190565b600490517f8de7233f000000000000000000000000000000000000000000000000000000008152fd5b6109139150853d8711610604576105f58183610cb9565b386106fa565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60209101126101815760043590565b9060206104cd928181520190610465565b34610181576105d061097361096e36610919565b610e7d565b604051918291602083526020830190610465565b3461018157602061099736610919565b604051908152f35b34610181576109ad36610919565b60005260046020526020604060002054604051908152f35b906104cd916020815260206109e583516040838501526060840190610465565b9201519060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082850301910152610465565b346101815760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101815760243567ffffffffffffffff8082116101815736602383011215610181578160040135908111610181573660248284010111610181576105d091610a949160246044359201600435611573565b604051918291826109c5565b346101815760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018157602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346101815760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018157602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b610b4d366101f3565b610b556116ef565b63389a75e1600c52806000526020600c209081544211610b7d576000610b7b9255611727565b005b636f5e88186000526004601cfd5b610b94366101f3565b610b9c6116ef565b8060601b15610bae57610b7b90611727565b637448fbae6000526004601cfd5b3461018157610bca366101f3565b63389a75e1600c52600052602080600c2054604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610100810190811067ffffffffffffffff821117610c3057604052565b610be4565b6060810190811067ffffffffffffffff821117610c3057604052565b60a0810190811067ffffffffffffffff821117610c3057604052565b6040810190811067ffffffffffffffff821117610c3057604052565b67ffffffffffffffff8111610c3057604052565b60c0810190811067ffffffffffffffff821117610c3057604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610c3057604052565b90816020910312610181575190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610181570180359067ffffffffffffffff82116101815760200191813603831361018157565b908092918237016000815290565b60021115610dad57565b610d09565b60405190610dbf82610c51565b565b60405190610dbf82610c9d565b60405190610dbf82610c6d565b67ffffffffffffffff8111610c3057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f82011215610181578051610e2b81610ddb565b92610e396040519485610cb9565b81845260208284010111610181576104cd9160208085019101610442565b9060208282031261018157815167ffffffffffffffff8111610181576104cd9201610e15565b600073ffffffffffffffffffffffffffffffffffffffff815416916024604051809481937f03f2c7da00000000000000000000000000000000000000000000000000000000835260048301525afa90811561060b57600091610edd575090565b6104cd91503d806000833e610ef28183610cb9565b810190610e57565b929192610f0682610ddb565b91610f146040519384610cb9565b829481845281830111610181578281602093846000960137010152565b519060ff8216820361018157565b519063ffffffff8216820361018157565b519067ffffffffffffffff8216820361018157565b51907fffffffffffff00000000000000000000000000000000000000000000000000008216820361018157565b51907fffff0000000000000000000000000000000000000000000000000000000000008216820361018157565b91908261010091031261018157604051610fd881610c13565b8092610fe381610f31565b825260208101519060028210156101815760e061105c918193602086015261100d60408201610f3f565b604086015261101e60608201610f50565b606086015261102f60808201610f50565b608086015261104060a08201610f3f565b60a086015261105160c08201610f65565b60c086015201610f92565b910152565b51907fffffffffffffffff0000000000000000000000000000000000000000000000008216820361018157565b91909160608184031261018157604051906110a882610c35565b819381519067ffffffffffffffff821161018157826110d06040949261105c94869401610e15565b85526110de60208201611061565b602086015201611061565b67ffffffffffffffff8111610c305760051b60200190565b5190600882101561018157565b81601f82011215610181578051906020611127836110e9565b9360406111376040519687610cb9565b8486528286019183606080970286010194818611610181578401925b858410611164575050505050505090565b868483031261018157848791845161117b81610c35565b61118487610f31565b8152611191838801610f50565b838201526111a0868801611101565b86820152815201930192611153565b81601f82011215610181578051916020916111c9846110e9565b936040926111da6040519687610cb9565b818652848087019260051b8401019381851161018157858401925b858410611206575050505050505090565b835167ffffffffffffffff908181116101815786019160a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0858803011261018157611251610db2565b908a85015184811161018157878c61126b92880101610e15565b8252611278868601611061565b8b83015260609061128a828701611061565b878401526080918287015186811161018157898e6112aa928a0101610e15565b90840152850151938411610181576112c9878c8097968197010161110e565b908201528152019301926111f5565b9080601f83011215610181578151906020916112f3816110e9565b936113016040519586610cb9565b81855260208086019260051b82010192831161018157602001905b82821061132a575050505090565b83809161133684610f31565b81520191019061131c565b81601f820112156101815780519160209161135b846110e9565b9360409261136c6040519687610cb9565b818652848087019260051b8401019381851161018157858401925b858410611398575050505050505090565b83519067ffffffffffffffff918281116101815786019060a092837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08488030112610181578451906113e982610c51565b8a84015161ffff811681036101815782528584015181811161018157878c611413928701016112d8565b8b83015260609081850151908111610181578b958561143a8a8961145695819a01016112d8565b8986015260809361144c858301610f50565b9086015201611101565b90820152815201930192611387565b9190916101a0818403126101815761147d8382610fbf565b9261010082015167ffffffffffffffff9081811161018157826114a191850161108e565b9361012084015182811161018157836114bb9186016111af565b9361014081015183811161018157846114d5918301611341565b9361016082015184811161018157816114ef918401610e15565b93610180830151908111610181576104cd9201610e15565b610160818303126101815761151c8282610fbf565b926101008201519167ffffffffffffffff928381116101815784611541918301611341565b93610120820151848111610181578161155b918401610e15565b93610140830151908111610181576104cd9201610e15565b93929091936040519161158583610c6d565b606083526020916115a0838501956060875285983691610efa565b6000908051906001908160018411888084015160f01c17613078141660011b925b61166d575b5050501561165f576115ff917fffffffffffff0000000000000000000000000000000000000000000000000000849260d01b1690611afe565b8061160c575b5050505050565b611617600391610e7d565b911015611640578161162f9282518301019101611507565b9094525050525b3880808080611605565b816116519282518301019101611465565b945095925050505252611636565b63101827966000526004601cfd5b909193927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff907403010a071000000b0104040208000c05090d060e0f6d03e4088843e41bac00000000000060ff85808a019988010151161c601f161a908560fc1c82151715029460041b010193838110156116ea579190806115c1565b6115c6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754330361171957565b6382b429006000526004601cfd5b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6040519061179682610c6d565b8160008082526040519160c083019183831067ffffffffffffffff841117610c305760209260405280845280838501528060408501528060608501526060608085015260a08401520152565b604051906117ef82610c13565b8160e06000918281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b61186e9061182c611789565b506118356117e2565b506118686118566118606118498480610d44565b9290946020810190610d44565b9490923691610efa565b923691610efa565b906121f1565b809160208201519161187f83610da3565b61188883610da3565b60c08101517fffffffffffff000000000000000000000000000000000000000000000000000016906118d860408201946118c6865163ffffffff1690565b9360ff63ffffffff8096169216611afe565b936118fe6118f1606084015167ffffffffffffffff1690565b67ffffffffffffffff1690565b421080156119b9575b61198f57600393611926608061196994015167ffffffffffffffff1690565b95611947611932610dc1565b3381529767ffffffffffffffff166020890152565b6001604088015260608701526080860152600060a08601525163ffffffff1690565b161015611987576000905b61197c610dce565b918252602082015291565b600090611974565b60046040517fbae57649000000000000000000000000000000000000000000000000000000008152fd5b506119d26118f1608084015167ffffffffffffffff1690565b4211611907565b602001606081510151906119ec82610e7d565b51611a80575b6080915051015173ffffffffffffffffffffffffffffffffffffffff60005416803b1561018157611a656000929183926040519485809481937f3a91c226000000000000000000000000000000000000000000000000000000008352896004840152604060248401526044830190610465565b03925af1801561060b57611a77575090565b6104cd90610c89565b73ffffffffffffffffffffffffffffffffffffffff6000541691823b15610181576000926024849260405195869384927f86911cde00000000000000000000000000000000000000000000000000000000845260048401525af191821561060b57608092611aef575b506119f2565b611af890610c89565b38611ae9565b60405160f89190911b7fff0000000000000000000000000000000000000000000000000000000000000016602082019081527fffffffffffff0000000000000000000000000000000000000000000000000000909216602182015260e09290921b7fffffffff0000000000000000000000000000000000000000000000000000000016602783015290611b9481602b8101610885565b519020600052600460205260406000205490565b60409182815103611d2457611c109373ffffffffffffffffffffffffffffffffffffffff6001541690845180927f6d3537a00000000000000000000000000000000000000000000000000000000082526020600483015281806000998a956024830190610465565b03915afa90811561060b578591611d0a575b5083815103611d03579380809383600197611c54611c49611c4e611c49611cf19b996124cd565b612427565b936125a8565b90611c6d611c49611c67611c49846124cd565b926125a8565b9187519360208501958652888501526060840152608083015260a082015260a08152611c9881610c9d565b519073c2b78104907f722dabac4c69f826a522b2754de45afa903d15611cf55790611ce2913d611cd3611cca82610ddb565b92519283610cb9565b8152809360203d92013e612468565b60208082518301019101610cfa565b1490565b509050611ce2606091612468565b5050505090565b611d1e91503d8087833e610ef28183610cb9565b38611c22565b50505050600090565b91909160408184031261018157805192602082015167ffffffffffffffff8111610181576104cd9201611341565b9061010082820312610181576104cd91610fbf565b60405190611d7d82610c35565b6000604083606081528260208201520152565b9190916040818403126101815780519267ffffffffffffffff938481116101815781611dbd91840161108e565b936020830151908111610181576104cd92016111af565b9060ff82511681526020820151916002831015610dad5760e08091610dbf94602085015263ffffffff6040820151166040850152611e236060820151606086019067ffffffffffffffff169052565b60808181015167ffffffffffffffff169085015260a08181015163ffffffff169085015260c0818101517fffffffffffff0000000000000000000000000000000000000000000000000000169085015201517fffff00000000000000000000000000000000000000000000000000000000000016910152565b906008821015610dad5752565b80518083526020600582901b840181019392810191906000818501815b848310611ed7575050505050505090565b909192877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe088839798999b9a03018452875190611f1d60a0835190808452830190610465565b83830151917fffffffffffffffff00000000000000000000000000000000000000000000000080931685820152604092838501511683820152611f6c6060928386015183820385850152610465565b906080809501519481830391015284808551928381520194019286925b828410611fae5750505050509080600192980193019301919493929097959697611ec6565b91939582829496611fe16001948a5160ff815116845267ffffffffffffffff868201511686850152015187830190611e9c565b0196019401918995949391611f89565b90815180825260208080930193019160005b828110612011575050505090565b835160ff1685529381019392810192600101612003565b908082519081815260208091019281808460051b8301019501936000915b8483106120565750505050505090565b9091929394958480827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085600195030186526120e68a51916120c36120b060a061ffff865116845286860151908088860152840190611ff1565b6040808601519084830390850152611ff1565b92606067ffffffffffffffff818301511690830152608080910151910190611e9c565b9801930193019194939290612046565b94919361217d6104cd979561219b9561213361218c956121198b6101a092611dd4565b806101008c015260608451918c01526102008b0190610465565b9160406020820151917fffffffffffffffff0000000000000000000000000000000000000000000000008093166101c08d01520151166101e08a01528882036101208a0152611ea9565b90868203610140880152612028565b90848203610160860152610465565b91610180818403910152610465565b926121d36104cd95936121e2936121c48761016092611dd4565b80610100880152860190612028565b90848203610120860152610465565b91610140818403910152610465565b906121fa6117e2565b5061221d61052160035473ffffffffffffffffffffffffffffffffffffffff1690565b9160408051917f0985653c0000000000000000000000000000000000000000000000000000000083526000918284806122598560048301610949565b0381895afa93841561060b578394612401575b508051927f0f1dbf45000000000000000000000000000000000000000000000000000000008452610100938481806122a78760048301610949565b03818b5afa94851561060b5782956123d2575b50508396600363ffffffff6122d58588015163ffffffff1690565b1610156122f857505093610885916122f5949551958694602086016121aa565b91565b909491612303611d70565b956060926001602088015161231781610da3565b61232081610da3565b14612341575b50509161088593916122f596979351978896602088016120f6565b949250809650819793915180957f2793d5d200000000000000000000000000000000000000000000000000000000825281806123808760048301610949565b03915afa95861561060b576122f596610885958280926123ac575b505090968193955097919397612326565b9091506123cb92503d8091833e6123c38183610cb9565b810190611d90565b388061239b565b6123f2929550803d106123fa575b6123ea8183610cb9565b810190611d5b565b9238806122ba565b503d6123e0565b61241e9194503d8085833e6124168183610cb9565b810190611d2d565b9050923861226c565b60208151910151906020811061243b575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b1561246f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8051602090811161018157604051916124e583610c6d565b81835281830190823683378280910191925b8082101561255657508061253757507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b61254b61254661255092612637565b612672565b612645565b90612529565b909192835181528181018091116125a357928181018091116125a357917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081116125a357906124f7565b61249e565b805160401161018157604051906125be82610c6d565b6020908183528183019082368337604083910191925b808210156125ea57508061253757509192915050565b909192835181528181018091116125a357928181018091116125a357917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081116125a357906125d4565b60200390602082116125a357565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116125a357565b601f81116125a3576101000a9056fea2646970667358221220ef1459be912f31d503ab1be0bceb54f40d30c0b40b8107b1614fa28c18226d7664736f6c63430008180033000000000000000000000000bdaf40fbfea4596f129bd11d273c3eb64d3b4c6200000000000000000000000015c702f2c01c109b3261effb0a6a48de0f3ceae5000000000000000000000000c2a662e08a35513596e22d0ac236ce72e59125ee0000000000000000000000005213c0e3ab478dbc83e8afff8909717332e4f8e1", - "nonce": "0x6", + "input": "0x60a0346100eb57601f61286038819003918201601f19168301916001600160401b038311848410176100f05780849260a0946040528339810103126100eb5761004781610106565b61005360208301610106565b9061006060408401610106565b91610079608061007260608701610106565b9501610106565b600080546001600160a01b03199081166001600160a01b039586161790915560809290925260018054831691841691909117905560028054821693831693909317909255600380549092169216919091179055604051612745908161011b82396080518181816101bb01526124530152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036100eb5756fe6080604052600436101561001257600080fd5b60003560e01c806304f3bcec146100c75780634ba52fa5146100c2578063536c633d146100bd578063a53e7275146100b8578063a8349fb7146100b3578063b414d0b2146100ae578063b63e9e7b146100a9578063bf721aaf146100a4578063cfbc42fb1461009f578063d88d1df61461009a5763ec950d331461009557600080fd5b61095c565b61090a565b610879565b6106d9565b610673565b610603565b6103d4565b61026d565b610170565b61011e565b346101195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011957602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b600080fd5b346101195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011957602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346101195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60005b8381106101f25750506000910152565b81810151838201526020016101e2565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361023e815180928187528780880191016101df565b0116010190565b909161025c61026a93604084526040840190610202565b916020818403910152610202565b90565b346101195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610119576102d76102be60025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b6040517fb13bf2900000000000000000000000000000000000000000000000000000000081526003600482015260006024820152602081604481855afa80156103cf5761032c916000916103a0575b50611c19565b90602060405180927fb13bf290000000000000000000000000000000000000000000000000000000008252818061037160048201906000602060408401938281520152565b03915afa80156103cf5761038c916000916103a05750611c19565b9061039c60405192839283610245565b0390f35b6103c2915060203d6020116103c8575b6103ba8183610a1b565b810190610a5c565b38610326565b503d6103b0565b610a9a565b346101195760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101195760043567ffffffffffffffff811161011957806004019060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112610119576104686102be60025473ffffffffffffffffffffffffffffffffffffffff1690565b602060405180927fb13bf29000000000000000000000000000000000000000000000000000000000825281806104ad6004820190600060206040840193600381520152565b03915afa80156103cf576104c9916000916105a3575b5061193d565b90602060006104d88580610aa6565b906104e860405180938193610af7565b039060025afa156103cf5761051f9161051b9161051561050e6024600051930187610aa6565b3691610c1d565b90611d42565b1590565b61057957806020600061053461053d946114da565b94909380610aa6565b9061054d60405180938193610af7565b039060025afa156103cf5761039c916105699160005190611863565b6040519081529081906020820190565b7f8de7233f0000000000000000000000000000000000000000000000000000000060005260046000fd5b6105bc915060203d6020116103c8576103ba8183610a1b565b386104c3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60209101126101195760043590565b90602061026a928181520190610202565b346101195761039c61061c610617366105c2565b61193d565b604051918291602083526020830190610202565b60ff81160361011957565b7fffffffffffff000000000000000000000000000000000000000000000000000081160361011957565b63ffffffff81160361011957565b346101195760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101195760206106d16004356106b381610630565b6024356106bf8161063b565b604435916106cc83610665565b610b05565b604051908152f35b34610119576107496106ea366105c2565b60206000916107106102be845473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809681947fe973fddc000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9182156103cf576107bc9282918291610807575b506107836102be835473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809681947f9e5464b2000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa80156103cf57602092826106d193926107e4575b5050828082518301019101610a5c565b61080092503d8091833e6107f88183610a1b565b810190611917565b38806107d4565b610820915060203d6020116103c8576103ba8183610a1b565b38610761565b9061026a9160208152602061084683516040838501526060840190610202565b9201519060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082850301910152610202565b346101195760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101195760243560043567ffffffffffffffff821161011957366023830112156101195781600401359167ffffffffffffffff83116101195736602484830101116101195761039c926108fe9260246044359301906113b2565b60405191829182610826565b346101195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011957602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346101195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011957602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610100810190811067ffffffffffffffff8211176109fa57604052565b6109ae565b6060810190811067ffffffffffffffff8211176109fa57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109fa57604052565b90816020910312610119575190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610119570180359067ffffffffffffffff82116101195760200191813603831361011957565b908092918237016000815290565b917fffffffff00000000000000000000000000000000000000000000000000000000907fffffffffffff0000000000000000000000000000000000000000000000000000604051937fff0000000000000000000000000000000000000000000000000000000000000060208601967fbb69b29c00000000000000000000000000000000000000000000000000000000885260f81b16602486015216602584015260e01b16602b820152600f8152610bbd602f82610a1b565b51902090565b60405190610bd260a083610a1b565b565b60405190610bd260c083610a1b565b67ffffffffffffffff81116109fa57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192610c2982610be3565b91610c376040519384610a1b565b829481845281830111610119578281602093846000960137010152565b5190610bd282610630565b5190600282101561011957565b5190610bd282610665565b519067ffffffffffffffff8216820361011957565b5190610bd28261063b565b51907fffff0000000000000000000000000000000000000000000000000000000000008216820361011957565b91908261010091031261011957604051610cdd816109dd565b60e0610d5c818395610cee81610c54565b8552610cfc60208201610c5f565b6020860152610d0d60408201610c6c565b6040860152610d1e60608201610c77565b6060860152610d2f60808201610c77565b6080860152610d4060a08201610c6c565b60a0860152610d5160c08201610c8c565b60c086015201610c97565b910152565b81601f820112156101195760208151910190610d7c81610be3565b92610d8a6040519485610a1b565b818452818301116101195761026a9160208401906101df565b51907fffffffffffffffff0000000000000000000000000000000000000000000000008216820361011957565b9190916060818403126101195760405190610dea826109ff565b819381519067ffffffffffffffff82116101195782610e1260409492610d5c94869401610d61565b8552610e2060208201610da3565b602086015201610da3565b67ffffffffffffffff81116109fa5760051b60200190565b5190600882101561011957565b81601f8201121561011957805190610e6782610e2b565b92610e756040519485610a1b565b8284526020606081860194028301019181831161011957602001925b828410610e9f575050505090565b606084830312610119576020606091604051610eba816109ff565b8651610ec581610630565b8152610ed2838801610c77565b83820152610ee260408801610e43565b6040820152815201930192610e91565b9080601f8301121561011957815191610f0a83610e2b565b92610f186040519485610a1b565b80845260208085019160051b830101918383116101195760208101915b838310610f4457505050505090565b825167ffffffffffffffff81116101195782019060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838803011261011957610f8c610bc3565b90602083015167ffffffffffffffff811161011957876020610fb092860101610d61565b8252610fbe60408401610da3565b6020830152610fcf60608401610da3565b6040830152608083015167ffffffffffffffff811161011957876020610ff792860101610d61565b606083015260a08301519167ffffffffffffffff83116101195761102388602080969581960101610e50565b6080820152815201920191610f35565b519061ffff8216820361011957565b9080601f8301121561011957815161105981610e2b565b926110676040519485610a1b565b81845260208085019260051b82010192831161011957602001905b82821061108f5750505090565b60208091835161109e81610630565b815201910190611082565b9080601f830112156101195781516110c081610e2b565b926110ce6040519485610a1b565b81845260208085019260051b820101918383116101195760208201905b8382106110fa57505050505090565b815167ffffffffffffffff81116101195760209161111d87848094880101610d61565b8152019101906110eb565b9080601f830112156101195781519161114083610e2b565b9261114e6040519485610a1b565b80845260208085019160051b830101918383116101195760208101915b83831061117a57505050505090565b825167ffffffffffffffff81116101195782019060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08388030112610119576111c2610bd4565b906111cf60208401611033565b8252604083015167ffffffffffffffff8111610119578760206111f492860101611042565b6020830152606083015167ffffffffffffffff81116101195787602061121c92860101611042565b604083015261122d60808401610c77565b606083015261123e60a08401610e43565b608083015260c08301519167ffffffffffffffff83116101195761126a886020809695819601016110a9565b60a082015281520192019161116b565b916101a083830312610119576112908284610cc4565b9261010081015167ffffffffffffffff811161011957836112b2918301610dd0565b9261012082015167ffffffffffffffff811161011957816112d4918401610ef2565b9261014083015167ffffffffffffffff811161011957826112f6918501611128565b9261016081015167ffffffffffffffff81116101195783611318918301610d61565b9261018082015167ffffffffffffffff81116101195761026a9201610d61565b90610160828203126101195761134e8183610cc4565b9261010083015167ffffffffffffffff81116101195782611370918501611128565b9261012081015167ffffffffffffffff81116101195783611392918301610d61565b9261014082015167ffffffffffffffff81116101195761026a9201610d61565b9091939260405191604083019083821067ffffffffffffffff8311176109fa5761144961144e916003936040526060865261143961141161140661140160208a019a60608c528a9d3691610c1d565b611b4a565b65ffffffffffff1690565b60d01b7fffffffffffff00000000000000000000000000000000000000000000000000001690565b60ff63ffffffff87169216610b05565b611c19565b911015611470578060208061146893518301019101611338565b909452505052565b806020806114839351830101910161127a565b945095925050505252565b6040519061149b826109dd565b600060e0838281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b600211156114d557565b610a6b565b6114e261148e565b5061151561150361150d6114f68480610aa6565b9290946020810190610aa6565b9490923691610c1d565b923691610c1d565b9160009161152161148e565b506115446102be60035473ffffffffffffffffffffffffffffffffffffffff1690565b93604051907f0985653c00000000000000000000000000000000000000000000000000000000825284828061157c86600483016105f2565b0381895afa9182156103cf57859261183d575b50604051947f0f1dbf4500000000000000000000000000000000000000000000000000000000865261010086806115c987600483016105f2565b03818a5afa9586156103cf57819661180c575b506040860196600363ffffffff6115f78a5163ffffffff1690565b1610156117235750506116a2929161161c611648926040519485938960208601612308565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610a1b565b93602084015190611658826114cb565b611661826114cb565b61169c61169160c08701517fffffffffffff00000000000000000000000000000000000000000000000000001690565b915163ffffffff1690565b91610b05565b916116c86116bb606083015167ffffffffffffffff1690565b67ffffffffffffffff1690565b4210908115611703575b506116d957565b7fbae576490000000000000000000000000000000000000000000000000000000060005260046000fd5b6080015161171b915067ffffffffffffffff166116bb565b4211386116d2565b91909261172e611e37565b92606094600160208a0151611742816114cb565b61174b816114cb565b14611775575b505061177092916116a29561161c926040519687958b60208801612255565b611648565b9350949350908260405180967f2793d5d200000000000000000000000000000000000000000000000000000000825281806117b389600483016105f2565b03915afa80156103cf576116a2958480926117d9575b5094959094509091908290611751565b611770955061161c93925090611800913d8091833e6117f88183610a1b565b810190611e57565b909450909185906117c9565b61182f9196506101003d8111611836575b6118278183610a1b565b810190611e22565b94386115dc565b503d61181d565b61185a9192503d8087833e6118528183610a1b565b810190611df4565b9050903861158f565b604091926118c891600073ffffffffffffffffffffffffffffffffffffffff815416928551968795869485937f5778ea320000000000000000000000000000000000000000000000000000000085526004850152606060248501526064840190610202565b90604483015203925af19081156103cf576000916118e4575090565b6040813d60401161190f575b816118fd60409383610a1b565b8101031261190b5751919050565b5080fd5b3d91506118f0565b9060208282031261011957815167ffffffffffffffff81116101195761026a9201610d61565b602061199e916119656102be60005473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947f7fc1ca02000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9081156103cf57611a12916000918291611a3d575b506119d96102be835473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947f9e5464b2000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9081156103cf57600091611a28575090565b61026a91503d806000833e6107f88183610a1b565b611a56915060203d6020116103c8576103ba8183610a1b565b386119b7565b9015611ae457602061199e91611a8a6102be60005473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947fe973fddc000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b6119d96102be835473ffffffffffffffffffffffffffffffffffffffff1690565b6020611b0c916119656102be60005473ffffffffffffffffffffffffffffffffffffffff1690565b03915afa9081156103cf57611a12916000918291611b2b575b50611ac3565b611b44915060203d6020116103c8576103ba8183610a1b565b38611b25565b90600082517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821160208087015160f01c17613078141660011b915b7403010a071000000b0104040208000c05090d060e0f6d03e4088843e41bac00000000000060ff6001808701968a010151161c601f161a908460fc1c82151715029360041b01019082811015611c015790917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90611b88565b50925015611c0b57565b63101827966000526004601cfd5b90606091611c456102be6102be6102be60005473ffffffffffffffffffffffffffffffffffffffff1690565b604051907f5c975abb000000000000000000000000000000000000000000000000000000008252602082600481845afa9182156103cf57600092611d21575b508115611ca2575b50611c945750565b61026a919250600090611a5c565b6040517f59d14b410000000000000000000000000000000000000000000000000000000081523360048201529150602090829060249082905afa9081156103cf57600091611cf2575b5038611c8c565b611d14915060203d602011611d1a575b611d0c8183610a1b565b810190612350565b38611ceb565b503d611d02565b611d3b91925060203d602011611d1a57611d0c8183610a1b565b9038611c84565b91906040815103611dcf576000611da99273ffffffffffffffffffffffffffffffffffffffff80600154161660405180809681947f6d3537a00000000000000000000000000000000000000000000000000000000083526020600484018181520190610202565b03915afa9182156103cf57600092611dd7575b506040825103611dcf5761026a926123df565b505050600090565b611ded9192503d806000833e6107f88183610a1b565b9038611dbc565b91909160408184031261011957805192602082015167ffffffffffffffff81116101195761026a9201611128565b90610100828203126101195761026a91610cc4565b60405190611e44826109ff565b6000604083606081528260208201520152565b91909160408184031261011957805167ffffffffffffffff81116101195783611e81918301610dd0565b92602082015167ffffffffffffffff81116101195761026a9201610ef2565b9060ff825116815260208201519160028310156114d55760e08091610bd2946020850152611edb6040820151604086019063ffffffff169052565b60608181015167ffffffffffffffff169085015260808181015167ffffffffffffffff169085015260a08181015163ffffffff169085015260c0818101517fffffffffffff0000000000000000000000000000000000000000000000000000169085015201517fffff00000000000000000000000000000000000000000000000000000000000016910152565b9060088210156114d55752565b9080602083519182815201906020808260051b8501019401916000905b828210611fa157505050505090565b9091929395947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087820301825284516080612052611fe8835160a0865260a0860190610202565b7fffffffffffffffff00000000000000000000000000000000000000000000000060208501511660208601527fffffffffffffffff000000000000000000000000000000000000000000000000604085015116604086015260608401518582036060870152610202565b910151916080818303910152602080835192838152019201906000905b8082106120915750505060208060019296019201920190929195939495611f92565b909192602060606001926120c76040885160ff815116845267ffffffffffffffff86820151168685015201516040830190611f68565b01940192019061206f565b906020808351928381520192019060005b8181106120f05750505090565b825160ff168452602093840193909201916001016120e3565b9080602083519182815201906020808260051b8501019401916000905b82821061213557505050505090565b9091929395947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0878203018252845161ffff815116825260a061219c61218a602084015160c0602087015260c08601906120d2565b604084015185820360408701526120d2565b9167ffffffffffffffff60608201511660608501526121c360808201516080860190611f68565b01519160a0818303910152815180825260208201906020808260051b85010194019260005b82811061220c57505050505060208060019296019201920190929195939495612126565b9091929394602080612248837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087600196030189528951610202565b97019501939291016121e8565b9491936122db61026a97956122f995612271896122ea96611ea0565b6101a06101008a01527fffffffffffffffff00000000000000000000000000000000000000000000000060406122b68b60606101a087519201526102008d0190610202565b93826020820151166101c08d01520151166101e08a01528882036101208a0152611f75565b90868203610140880152612109565b90848203610160860152610202565b91610180818403910152610202565b9261233261026a959361231e8661234195611ea0565b610160610100870152610160860190612109565b90848203610120860152610202565b91610140818403910152610202565b90816020910312610119575180151581036101195790565b60208151910151906020811061237c575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b156123b057565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080916124b4936001956124076123fc6124016123fc856124f2565b612368565b93612601565b906124206123fc61241a6123fc846124f2565b92612601565b91604051936020850195865260408501526060840152608083015260a082015260a0815261244f60c082610a1b565b51907f00000000000000000000000000000000000000000000000000000000000000005afa3d156124b8576124a53d9161248883610be3565b926124966040519485610a1b565b83523d6000602085013e6123a9565b60208082518301019101610a5c565b1490565b6124a56060916123a9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8051602011610119576125056020610be3565b906125136040519283610a1b565b602082526125216020610be3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237602080920190915b60208110156125b2578061259357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b6125a76125a26125ac926126c5565b612700565b6126d3565b90612585565b909182518152602081018091116125fc5791602081018091116125fc57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115612553575b6124c3565b8051604011610119576126146020610be3565b906126226040519283610a1b565b602082526126306020610be3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060400160205b6020811015612677578061259357509192915050565b909182518152602081018091116125fc5791602081018091116125fc57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115612661576124c3565b60200390602082116125fc57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116125fc57565b601f81116125fc576101000a9056fea26469706673582212200058d999c310301b0bd9261ec7eb54f10d6bf5fc991a28cf76fecfc4a937a15e64736f6c634300081b00330000000000000000000000002bbc0ccc218e63ad4d2bbb7bde1375b092fd38a20000000000000000000000000000000000000000000000000000000000000100000000000000000000000000cf171acd6c0a776f9d3e1f6cac8067c982ac6ce100000000000000000000000071056b540b4e60d0e8efb55fad487c486b09fff50000000000000000000000004aca9c0eb063401c9f5c2fc4487dbc5ccf1c9e2b", + "nonce": "0x8", "chainId": "0x1555e3" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0xa82fa70c1ae2111e4f95f5b9ea6a77b315b33e7c01a8fc99fcfb96a7e56a9747", + "hash": "0x7e33b2ca849602a6e275839cdbcfb9ec9384da823c32341a11462c5ac609af09", "transactionType": "CALL", "contractName": "AutomataDaoStorage", - "contractAddress": "0xbdaf40fbfea4596f129bd11d273c3eb64d3b4c62", + "contractAddress": "0x2bbc0ccc218e63ad4d2bbb7bde1375b092fd38a2", "function": "updateDao(address,address,address,address)", "arguments": [ - "0x15C702f2c01C109B3261EfFB0A6a48de0F3cEAE5", - "0x77D4a1136De08F97Fd2FFB71a109c8ceE3f4B031", - "0xc728DD0FcD76CD9166F66e1CD8002dE86d6525B8", - "0x00F6Da18cF3f717de55E3aEcC71A3b47DaEce967" + "0xcf171ACd6c0a776f9d3E1F6Cac8067c982Ac6Ce1", + "0x31F18aA7B4cbAD7A726BCBF5AB3e286fC0b02A82", + "0x9c54C72867b07caF2e6255CE32983c28aFE40F26", + "0x45f91C0d9Cf651785d93fcF7e9E97dE952CdB910" ], "transaction": { - "from": "0xdc3bda6d40f0e33e0dfa4aef9604b66195e6c5dc", - "to": "0xbdaf40fbfea4596f129bd11d273c3eb64d3b4c62", - "gas": "0x289e9", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", + "to": "0x2bbc0ccc218e63ad4d2bbb7bde1375b092fd38a2", + "gas": "0x289e8", "value": "0x0", - "input": "0x40070f2d00000000000000000000000015c702f2c01c109b3261effb0a6a48de0f3ceae500000000000000000000000077d4a1136de08f97fd2ffb71a109c8cee3f4b031000000000000000000000000c728dd0fcd76cd9166f66e1cd8002de86d6525b800000000000000000000000000f6da18cf3f717de55e3aecc71a3b47daece967", - "nonce": "0x7", + "input": "0x40070f2d000000000000000000000000cf171acd6c0a776f9d3e1f6cac8067c982ac6ce100000000000000000000000031f18aa7b4cbad7a726bcbf5ab3e286fc0b02a820000000000000000000000009c54c72867b07caf2e6255ce32983c28afe40f2600000000000000000000000045f91c0d9cf651785d93fcf7e9e97de952cdb910", + "nonce": "0x9", "chainId": "0x1555e3" }, "additionalContracts": [], @@ -137,221 +141,157 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0xbdef8", + "cumulativeGasUsed": "0x15735f", "logs": [ { - "address": "0xbdaf40fbfea4596f129bd11d273c3eb64d3b4c62", + "address": "0x2bbc0ccc218e63ad4d2bbb7bde1375b092fd38a2", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000dc3bda6d40f0e33e0dfa4aef9604b66195e6c5dc" + "0x0000000000000000000000007e212e611826122dc69098fbe0f4057b823751f1" ], "data": "0x", - "blockHash": "0x4abb38f88f586ad5237ae905be5886a7487a5ec2aa753d90561b8ebb5c2c818b", - "blockNumber": "0x1288b8", - "transactionHash": "0xb53857212f1f83c0e66cc9961f62576c571b643bf4dd9e30b9b1c763813b5ce6", + "blockHash": "0xc0ccbb7d5c9bf075619d9880a2c305774bd63f9cfb53fa7301c80aabb8df2af9", + "blockNumber": "0x63a166", + "transactionHash": "0x96397c3b9fe8c02c1d2b7f08e26e018c9d05b3376c61a7b2a31afab8e28def7f", "transactionIndex": "0x1", "logIndex": "0x0", "removed": false } ], - "logsBloom": "0x00004000800000020000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "logsBloom": "0x00000008000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000900000000000000000000000000000008400000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000020000000", "type": "0x2", - "transactionHash": "0xb53857212f1f83c0e66cc9961f62576c571b643bf4dd9e30b9b1c763813b5ce6", + "transactionHash": "0x96397c3b9fe8c02c1d2b7f08e26e018c9d05b3376c61a7b2a31afab8e28def7f", "transactionIndex": "0x1", - "blockHash": "0x4abb38f88f586ad5237ae905be5886a7487a5ec2aa753d90561b8ebb5c2c818b", - "blockNumber": "0x1288b8", - "gasUsed": "0xb339e", - "effectiveGasPrice": "0xfd", - "from": "0xdc3bda6d40f0e33e0dfa4aef9604b66195e6c5dc", + "blockHash": "0xc0ccbb7d5c9bf075619d9880a2c305774bd63f9cfb53fa7301c80aabb8df2af9", + "blockNumber": "0x63a166", + "gasUsed": "0x14c811", + "effectiveGasPrice": "0x2dc9b4", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", "to": null, - "contractAddress": "0xbdaf40fbfea4596f129bd11d273c3eb64d3b4c62", + "contractAddress": "0x2bbc0ccc218e63ad4d2bbb7bde1375b092fd38a2", "l1BaseFeeScalar": "0x558", "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xc5fc5", - "l1Fee": "0x12b44a3e4b8", - "l1GasPrice": "0x8c11be75c", - "l1GasUsed": "0x619d" + "l1Fee": "0x23f0f3a3b", + "l1GasPrice": "0xa81eef0", + "l1GasUsed": "0x9c45" }, { "status": "0x1", - "cumulativeGasUsed": "0x2a2fce", - "logs": [ - { - "address": "0x15c702f2c01c109b3261effb0a6a48de0f3ceae5", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000dc3bda6d40f0e33e0dfa4aef9604b66195e6c5dc" - ], - "data": "0x", - "blockHash": "0x4abb38f88f586ad5237ae905be5886a7487a5ec2aa753d90561b8ebb5c2c818b", - "blockNumber": "0x1288b8", - "transactionHash": "0x400d89282a5c9f8ef4634ad22a85b01a493dcf3d1e3339029feb2fe7c153d02b", - "transactionIndex": "0x2", - "logIndex": "0x1", - "removed": false - } - ], - "logsBloom": "0x00004000800000000000000000080000000000000000000000800000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "cumulativeGasUsed": "0x33ae29", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x400d89282a5c9f8ef4634ad22a85b01a493dcf3d1e3339029feb2fe7c153d02b", + "transactionHash": "0xe6d86a0c2123045d35e27046fea9884f4f8550a0b581075ca26ed8ca162c7618", "transactionIndex": "0x2", - "blockHash": "0x4abb38f88f586ad5237ae905be5886a7487a5ec2aa753d90561b8ebb5c2c818b", - "blockNumber": "0x1288b8", - "gasUsed": "0x1e50d6", - "effectiveGasPrice": "0xfd", - "from": "0xdc3bda6d40f0e33e0dfa4aef9604b66195e6c5dc", + "blockHash": "0xc0ccbb7d5c9bf075619d9880a2c305774bd63f9cfb53fa7301c80aabb8df2af9", + "blockNumber": "0x63a166", + "gasUsed": "0x1e3aca", + "effectiveGasPrice": "0x2dc9b4", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", "to": null, - "contractAddress": "0x15c702f2c01c109b3261effb0a6a48de0f3ceae5", + "contractAddress": "0xcf171acd6c0a776f9d3e1f6cac8067c982ac6ce1", "l1BaseFeeScalar": "0x558", "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xc5fc5", - "l1Fee": "0x32df2212c8c", - "l1GasPrice": "0x8c11be75c", - "l1GasUsed": "0x1097d" + "l1Fee": "0x3945a3766", + "l1GasPrice": "0xa81eef0", + "l1GasUsed": "0xf905" }, { "status": "0x1", - "cumulativeGasUsed": "0x55486b", - "logs": [ - { - "address": "0x77d4a1136de08f97fd2ffb71a109c8cee3f4b031", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000dc3bda6d40f0e33e0dfa4aef9604b66195e6c5dc" - ], - "data": "0x", - "blockHash": "0x4abb38f88f586ad5237ae905be5886a7487a5ec2aa753d90561b8ebb5c2c818b", - "blockNumber": "0x1288b8", - "transactionHash": "0x180538b43fbd9f87e647ce6fe61bf902d90ab816906edb4c01f67c962dd76ce1", - "transactionIndex": "0x3", - "logIndex": "0x2", - "removed": false - } - ], - "logsBloom": "0x000040008000000000000000000000080000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000200000000000000000008000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000040000000000000000000000000000000000000", + "cumulativeGasUsed": "0x5eb82d", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x180538b43fbd9f87e647ce6fe61bf902d90ab816906edb4c01f67c962dd76ce1", + "transactionHash": "0x17c7c4e9e1a5d3b9f6e41f64437b8420c7222fb60db809ca58f01bed9e48a6dd", "transactionIndex": "0x3", - "blockHash": "0x4abb38f88f586ad5237ae905be5886a7487a5ec2aa753d90561b8ebb5c2c818b", - "blockNumber": "0x1288b8", - "gasUsed": "0x2b189d", - "effectiveGasPrice": "0xfd", - "from": "0xdc3bda6d40f0e33e0dfa4aef9604b66195e6c5dc", + "blockHash": "0xc0ccbb7d5c9bf075619d9880a2c305774bd63f9cfb53fa7301c80aabb8df2af9", + "blockNumber": "0x63a166", + "gasUsed": "0x2b0a04", + "effectiveGasPrice": "0x2dc9b4", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", "to": null, - "contractAddress": "0x77d4a1136de08f97fd2ffb71a109c8cee3f4b031", + "contractAddress": "0x31f18aa7b4cbad7a726bcbf5ab3e286fc0b02a82", "l1BaseFeeScalar": "0x558", "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xc5fc5", - "l1Fee": "0x4a27333dad5", - "l1GasPrice": "0x8c11be75c", - "l1GasUsed": "0x182fd" + "l1Fee": "0x54d4d23dd", + "l1GasPrice": "0xa81eef0", + "l1GasUsed": "0x170d9" }, { "status": "0x1", - "cumulativeGasUsed": "0x7006e4", - "logs": [ - { - "address": "0x00f6da18cf3f717de55e3aecc71a3b47daece967", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000dc3bda6d40f0e33e0dfa4aef9604b66195e6c5dc" - ], - "data": "0x", - "blockHash": "0x4abb38f88f586ad5237ae905be5886a7487a5ec2aa753d90561b8ebb5c2c818b", - "blockNumber": "0x1288b8", - "transactionHash": "0x306c3da8a22fd06f33d983fefd092c43139dc5e9ee9685b568c06548bf8cc4a4", - "transactionIndex": "0x4", - "logIndex": "0x3", - "removed": false - } - ], - "logsBloom": "0x00004000800000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000008000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "cumulativeGasUsed": "0x7816b6", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x306c3da8a22fd06f33d983fefd092c43139dc5e9ee9685b568c06548bf8cc4a4", + "transactionHash": "0x02d069ec2905be61189e9bc671d959eac1a1c2806465fc319914d94ce7287b33", "transactionIndex": "0x4", - "blockHash": "0x4abb38f88f586ad5237ae905be5886a7487a5ec2aa753d90561b8ebb5c2c818b", - "blockNumber": "0x1288b8", - "gasUsed": "0x1abe79", - "effectiveGasPrice": "0xfd", - "from": "0xdc3bda6d40f0e33e0dfa4aef9604b66195e6c5dc", + "blockHash": "0xc0ccbb7d5c9bf075619d9880a2c305774bd63f9cfb53fa7301c80aabb8df2af9", + "blockNumber": "0x63a166", + "gasUsed": "0x195e89", + "effectiveGasPrice": "0x2dc9b4", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", "to": null, - "contractAddress": "0x00f6da18cf3f717de55e3aecc71a3b47daece967", + "contractAddress": "0x45f91c0d9cf651785d93fcf7e9e97de952cdb910", "l1BaseFeeScalar": "0x558", "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xc5fc5", - "l1Fee": "0x2e74281195b", - "l1GasPrice": "0x8c11be75c", - "l1GasUsed": "0xf26e" + "l1Fee": "0x3196aee1a", + "l1GasPrice": "0xa81eef0", + "l1GasUsed": "0xd79c" }, { "status": "0x1", - "cumulativeGasUsed": "0x932c4c", - "logs": [ - { - "address": "0xc728dd0fcd76cd9166f66e1cd8002de86d6525b8", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000dc3bda6d40f0e33e0dfa4aef9604b66195e6c5dc" - ], - "data": "0x", - "blockHash": "0x4abb38f88f586ad5237ae905be5886a7487a5ec2aa753d90561b8ebb5c2c818b", - "blockNumber": "0x1288b8", - "transactionHash": "0x0dc50193602b2d1872361d789ed9fc87857d6cde51d7d23057ed68a087b1c282", - "transactionIndex": "0x5", - "logIndex": "0x4", - "removed": false - } - ], - "logsBloom": "0x00004000800000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000020000000100000000000000000000000000000000020000000000000000000000000", + "cumulativeGasUsed": "0x9b51b3", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x0dc50193602b2d1872361d789ed9fc87857d6cde51d7d23057ed68a087b1c282", + "transactionHash": "0x17cd2f4fc445661898e713c19f319f42756396f57a229cd520e87439ee2371e0", "transactionIndex": "0x5", - "blockHash": "0x4abb38f88f586ad5237ae905be5886a7487a5ec2aa753d90561b8ebb5c2c818b", - "blockNumber": "0x1288b8", - "gasUsed": "0x232568", - "effectiveGasPrice": "0xfd", - "from": "0xdc3bda6d40f0e33e0dfa4aef9604b66195e6c5dc", + "blockHash": "0xc0ccbb7d5c9bf075619d9880a2c305774bd63f9cfb53fa7301c80aabb8df2af9", + "blockNumber": "0x63a166", + "gasUsed": "0x233afd", + "effectiveGasPrice": "0x2dc9b4", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", "to": null, - "contractAddress": "0xc728dd0fcd76cd9166f66e1cd8002de86d6525b8", + "contractAddress": "0x9c54c72867b07caf2e6255ce32983c28afe40f26", "l1BaseFeeScalar": "0x558", "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xc5fc5", - "l1Fee": "0x3ee9bfe1cf1", - "l1GasPrice": "0x8c11be75c", - "l1GasUsed": "0x14854" + "l1Fee": "0x462c85df2", + "l1GasPrice": "0xa81eef0", + "l1GasUsed": "0x1311e" }, { "status": "0x1", - "cumulativeGasUsed": "0x94e8af", + "cumulativeGasUsed": "0x9d0e15", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0xa82fa70c1ae2111e4f95f5b9ea6a77b315b33e7c01a8fc99fcfb96a7e56a9747", + "transactionHash": "0x7e33b2ca849602a6e275839cdbcfb9ec9384da823c32341a11462c5ac609af09", "transactionIndex": "0x6", - "blockHash": "0x4abb38f88f586ad5237ae905be5886a7487a5ec2aa753d90561b8ebb5c2c818b", - "blockNumber": "0x1288b8", - "gasUsed": "0x1bc63", - "effectiveGasPrice": "0xfd", - "from": "0xdc3bda6d40f0e33e0dfa4aef9604b66195e6c5dc", - "to": "0xbdaf40fbfea4596f129bd11d273c3eb64d3b4c62", + "blockHash": "0xc0ccbb7d5c9bf075619d9880a2c305774bd63f9cfb53fa7301c80aabb8df2af9", + "blockNumber": "0x63a166", + "gasUsed": "0x1bc62", + "effectiveGasPrice": "0x2dc9b4", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", + "to": "0x2bbc0ccc218e63ad4d2bbb7bde1375b092fd38a2", "contractAddress": null, "l1BaseFeeScalar": "0x558", "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xc5fc5", - "l1Fee": "0x1a9f3a761e", - "l1GasPrice": "0x8c11be75c", - "l1GasUsed": "0x8ae" + "l1Fee": "0x20ea5cc0", + "l1GasPrice": "0xa81eef0", + "l1GasUsed": "0x8f1" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1721295188, + "timestamp": 1731924835, "chain": 1398243, - "commit": "7dbd0ab" + "commit": "1cc539f" } \ No newline at end of file diff --git a/broadcast/DeployAutomataDao.s.sol/1398243/deployPck-latest.json b/broadcast/DeployAutomataDao.s.sol/1398243/deployPck-latest.json index 6d11bf4..86e0dfb 100644 --- a/broadcast/DeployAutomataDao.s.sol/1398243/deployPck-latest.json +++ b/broadcast/DeployAutomataDao.s.sol/1398243/deployPck-latest.json @@ -1,23 +1,24 @@ { "transactions": [ { - "hash": "0x3ccb390761806a26bdde759c4b007d0443af3206125a1eccdda96a4d84934cb1", + "hash": "0x5e3db94637714167740544ec9299139d2ac556bb1b15917d271df5dd0ae08590", "transactionType": "CREATE", "contractName": "AutomataPckDao", - "contractAddress": "0x1d6339a89d6fa63cef4251cd50fd1f50e13afb41", + "contractAddress": "0x722525b96b62e182f8a095af0a79d4ea2037795c", "function": null, "arguments": [ - "0xe8599DD2366230B7EfDD526985c64C7325b27569", - "0x1c28516e432249C88466002d918624C0Aa3bF4e3", - "0xEF97396527180E1Be5646249f032f98e9296d75F", - "0xDA45Ce0c78c4E77e3FE2F38BBb9f3B7227102458" + "0x2bBc0Ccc218E63Ad4D2bbb7bdE1375B092FD38a2", + "0x0000000000000000000000000000000000000100", + "0xcf171ACd6c0a776f9d3E1F6Cac8067c982Ac6Ce1", + "0x4Aca9C0EB063401C9F5c2Fc4487DBC5ccF1C9E2B", + "0x6e204fEAe40F668a06E78a83b66185FFC8892DDA" ], "transaction": { - "from": "0x3d089c2f2cb86d4efde153c81cabd4579784430b", - "gas": "0x36dc19", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", + "gas": "0x37ef59", "value": "0x0", - "input": "0x608034620000ff57601f6200300038819003918201601f19168301916001600160401b038311848410176200010457808492608094604052833981010312620000ff576200004d816200011a565b906200005c602082016200011a565b62000078606062000070604085016200011a565b93016200011a565b9060018060a01b038080948160018060a01b03199716876000541617600055169182866001541617600155168460025416176002558360035416176003551690600454161760045533638b78c6d819553360007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3604051612ed09081620001308239f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620000ff5756fe6080604052600436101561001257600080fd5b60003560e01c80632569296214610182578063286858391461017d57806336c33bb61461014157806337b8762d146101785780633c7d7114146101735780633e2b584c1461016e57806348ac80591461016957806354d1f13d1461016457806359a517ff1461015f5780635be0fa4b1461015a57806368ef0c5314610155578063715018a6146101505780637eb619c71461014b5780638da5cb5b14610146578063980e087814610141578063b414d0b21461013c578063bf721aaf14610137578063c925d17a14610132578063d88d1df61461012d578063e4a4171a14610128578063f04e283e14610123578063f2fde38b1461011e5763fee81cf41461011957600080fd5b610e82565b610e51565b610e0a565b610de4565b610d92565b610cd2565b610cba565b610c92565b6105f8565b610c21565b610b6a565b610aea565b610ac4565b6109d0565b61097e565b610919565b6108af565b610846565b610737565b610632565b61037f565b6000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ec5763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b80fd5b9181601f8401121561021d5782359167ffffffffffffffff831161021d576020838186019501011161021d57565b600080fd5b60005b8381106102355750506000910152565b8181015183820152602001610225565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361028181518092818752878088019101610222565b0116010190565b9060408201916040815281518093526060810160608460051b830101936020809401916000905b8282106103375750505050818184039101528251908183528083019281808460051b8301019501936000915b8483106102eb5750505050505090565b9091929394958480610327837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528a51610245565b98019301930191949392906102db565b909192958580610371837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089600196030186528a51610245565b9801920192019092916102af565b3461021d576040807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021d5767ffffffffffffffff60043581811161021d576103d09036906004016101ef565b92909160243590811161021d5761040a6103f16104299236906004016101ef565b919061040260609687983691610fe2565b923691610fe2565b610412611019565b61041a611019565b91610423611019565b93611ce9565b50506040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000841660208083019182527fffff0000000000000000000000000000000000000000000000000000000000008516603084015260128352947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0949350916104b6603282610f46565b519020946104ce866000526005602052604060002090565b5493846104e9575b604051806104e58b8b83610288565b0390f35b9193809698506104fc9193959750611044565b9561050686611044565b978760005b8881106105195750506104d6565b6105da6105d56105ac6105cd846001966105bd8c6105b88d8d6105786105538f61054e8a916000526005602052604060002090565b612875565b7fffffffffffffffffffffffffffffffffffff00000000000000000000000000001690565b9889945194859283017fffffffffffffffffffffffffffffffffffff00000000000000000000000000006012921681520190565b03908101835282610f46565b611e66565b6105c783836110da565b526110da565b508a8a611ed5565b6119a5565b6105e4828d6110da565b526105ef818c6110da565b5001889061050b565b3461021d5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021d57602060405160008152f35b3461021d5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021d57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261021d5767ffffffffffffffff9060043582811161021d57816106cf916004016101ef565b9390939260243581811161021d57836106ea916004016101ef565b9390939260443583811161021d5782610705916004016101ef565b9390939260643591821161021d5761071f916004016101ef565b9091565b906020610734928181520190610245565b90565b3461021d576104e56104026107ce6107aa61079e61078761077f61077761075d36610684565b999660009e95949993969e989192985060609e3691610fe2565b983691610fe2565b953691610fe2565b916040519361079585610f2a565b60008552611ce9565b50908284959394611f77565b60005260066020526107c86107c36040600020546119a5565b6110f3565b91611ed5565b806107e9575b50604051918291602083526020830190610245565b6107f391506119a5565b386107d4565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602091011261021d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361021d5790565b3461021d5773ffffffffffffffffffffffffffffffffffffffff610869366107f9565b610871612001565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006002541617600255600080f35b60043590600482101561021d57565b3461021d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021d5761090b6104e56108f46108ef6108a0565b6111a4565b604092919251938493604085526040850190610245565b908382036020850152610245565b6000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ec5763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b3461021d5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021d57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b3461021d5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021d57610a076108a0565b67ffffffffffffffff60243581811161021d57610a289036906004016101ef565b9260443583811161021d57610a419036906004016101ef565b9060643585811161021d57610a5a9036906004016101ef565b92909160843596871161021d576104e597610a7c610a849836906004016101ef565b979096611329565b6040519081529081906020820190565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602091011261021d5760043590565b3461021d57610ad236610a94565b60005260076020526020604060002054604051908152f35b6000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ec57610b1d612001565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b3461021d576104e5610402610bb0610ba661077761077f610787610b8d36610684565b979660009d95929993949a91969d5060609d3691610fe2565b5092919091611f77565b600052600660205260406000205480610bd85750604051918291602083526020830190610245565b6107f391506107c3610be9916119a5565b7fffffffffffffffffffffffffffffffffffff000000000000000000000000000060405191166020820152601281526105b881610ed9565b3461021d5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021d5760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b3461021d576104e5610ca66105d536610a94565b604051918291602083526020830190610245565b3461021d576020610cca36610a94565b604051908152f35b3461021d5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021d5767ffffffffffffffff6004803582811161021d57610d2290369083016101ef565b9060243584811161021d57610d3a90369085016101ef565b9060443586811161021d57610d5290369087016101ef565b9060643588811161021d57610d6a90369089016101ef565b949093608435998a1161021d57610d8a610a84996104e59b3691016101ef565b989097611b0a565b3461021d5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021d57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b3461021d57610df236610a94565b60005260066020526020604060002054604051908152f35b610e13366107f9565b610e1b612001565b63389a75e1600c52806000526020600c209081544211610e43576000610e4192556122ce565b005b636f5e88186000526004601cfd5b610e5a366107f9565b610e62612001565b8060601b15610e7457610e41906122ce565b637448fbae6000526004601cfd5b3461021d57610e90366107f9565b63389a75e1600c52600052602080600c2054604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610ef557604052565b610eaa565b60c0810190811067ffffffffffffffff821117610ef557604052565b67ffffffffffffffff8111610ef557604052565b6020810190811067ffffffffffffffff821117610ef557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610ef557604052565b60405190610120820182811067ffffffffffffffff821117610ef557604052565b67ffffffffffffffff8111610ef557601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192610fee82610fa8565b91610ffc6040519384610f46565b82948184528183011161021d578281602093846000960137010152565b6040519061102682610f2a565b60008252565b67ffffffffffffffff8111610ef55760051b60200190565b9061104e8261102c565b61105b6040519182610f46565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611089829461102c565b019060005b82811061109a57505050565b80606060208093850101520161108e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156110ee5760209160051b010190565b6110ab565b90602082519201517fffffffffffffffffffffffffffffffffffff000000000000000000000000000090818116936012811061112e57505050565b60120360031b82901b16169150565b6004111561114757565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9190602083019260048210156111475752565b9081602091031261021d575190565b6040513d6000823e3d90fd5b9060048210156111475781158015611316575b6112de57611232916111fa6111e160025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b6040517f974ddd9500000000000000000000000000000000000000000000000000000000928382528180602097889360048301611176565b0381855afa9283156112ba5785916000946112bf575b506040519081526000600482015291829060249082905afa9384156112ba57600094611283575b505061127d610734916119a5565b926119a5565b61073492945061127d91816112ac92903d106112b3575b6112a48183610f46565b810190611189565b939161126f565b503d61129a565b611198565b6112d7919450823d84116112b3576112a48183610f46565b9238611248565b6040517f9849e774000000000000000000000000000000000000000000000000000000008152806113128460048301611176565b0390fd5b506113208261113d565b600382146111b7565b989695929097919397600494858b101561190f578a1580156118fc575b6118c957611391926104026113fc9a9b93611362933691610fe2565b9360409485519061137282610f2a565b6104236000998a845288519461138786610f2a565b8b86523691610fe2565b98939692979150506113a4368585610fe2565b9a6113c76111e160035473ffffffffffffffffffffffffffffffffffffffff1690565b86517fed3337850000000000000000000000000000000000000000000000000000000081528d818060209e8f93898301610723565b0381855afa9081156112ba5784916118ac575b50156118845790828d61144f9493895180809781947f3b79a61e0000000000000000000000000000000000000000000000000000000083528a8301610723565b03915afa9283156112ba578293611860575b5061010083019081518c81519101209d8c606061147d8461113d565b6114b3916114af916002860361183e575061149661208a565b905b880151906020815191012090602081519101201490565b1590565b611816576114dd6114af60808701516114ca6120c3565b6020815191012090602081519101201490565b6117ee5760c08501516114f1918d8d6124a0565b6115136111e160025473ffffffffffffffffffffffffffffffffffffffff1690565b8c895180927f189d97f70000000000000000000000000000000000000000000000000000000082528180611549878c8301611176565b03915afa9081156112ba578d916115679186916117d1575b506119a5565b80516116f4575b5050611579906111a4565b508051909190156116cc57826115968d92518a5191828092612113565b039060025afa156112ba576115b59260e06114af935191015190612889565b6116a557506107349697986115d361169f936115d893898989612171565b6121d9565b91517fffffffffffffffffffffffffffffffff0000000000000000000000000000000084169781019788527fffff000000000000000000000000000000000000000000000000000000000000851660108901527fffffffffffffffffffffffffffffffffffff0000000000000000000000000000861660128901529196879261168c81602484015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610f46565b5190206000526007602052604060002090565b556121f9565b83517fe7ef341f000000000000000000000000000000000000000000000000000000008152fd5b8488517fcd69d374000000000000000000000000000000000000000000000000000000008152fd5b9061174f9161171a6111e1895473ffffffffffffffffffffffffffffffffffffffff1690565b87518c518095819482937fcedb97810000000000000000000000000000000000000000000000000000000084528d84016120fc565b03915afa9081156112ba5784916117a4575b5061176d578b3861156e565b835188517f167c231a0000000000000000000000000000000000000000000000000000000081528087019182529081906020010390fd5b6117c491508d803d106117ca575b6117bc8183610f46565b810190612039565b38611761565b503d6117b2565b6117e89150833d85116112b3576112a48183610f46565b38611561565b8589517f92ec707e000000000000000000000000000000000000000000000000000000008152fd5b8589517f1e7ab599000000000000000000000000000000000000000000000000000000008152fd5b906118488661113d565b6001860361149857905061185a612051565b90611498565b61187d9193503d8084833e6118758183610f46565b810190611a22565b9138611461565b8387517fdba942a2000000000000000000000000000000000000000000000000000000008152fd5b6118c391508c8d3d106117ca576117bc8183610f46565b3861140f565b6040517f9849e774000000000000000000000000000000000000000000000000000000008152806113128d828a01611176565b506119068b61113d565b60038b14611346565b6021867f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b81601f8201121561021d57805161195381610fa8565b926119616040519485610f46565b8184526020828401011161021d576107349160208085019101610222565b9060208282031261021d57815167ffffffffffffffff811161021d57610734920161193d565b600073ffffffffffffffffffffffffffffffffffffffff815416916024604051809481937f03f2c7da00000000000000000000000000000000000000000000000000000000835260048301525afa9081156112ba57600091611a05575090565b61073491503d806000833e611a1a8183610f46565b81019061197f565b60208183031261021d57805167ffffffffffffffff9182821161021d57016101208184031261021d57611a53610f87565b9281518452602082015183811161021d5781611a7091840161193d565b60208501526040820151604085015260608201516060850152608082015183811161021d5781611aa191840161193d565b608085015260a082015183811161021d5781611abe91840161193d565b60a085015260c082015160c085015260e082015183811161021d5781611ae591840161193d565b60e0850152610100928383015190811161021d57611b03920161193d565b9082015290565b61042394611b35611b3d94611b2d61077f94611b459e9c9b969d989d3691610fe2565b9b3691610fe2565b963691610fe2565b943691610fe2565b6040517fffffffffffffffffffffffffffffffff000000000000000000000000000000008616602082019081527fffff000000000000000000000000000000000000000000000000000000000000861660308301527fffffffffffffffffffffffffffffffffffff0000000000000000000000000000831660328301529496959491939291611bdb9161168c8160448101611660565b548015611cbf57611beb906119a5565b91611c0e6111e160035473ffffffffffffffffffffffffffffffffffffffff1690565b92600060405180957f3b79a61e0000000000000000000000000000000000000000000000000000000082528180611c488660048301610723565b03915afa9384156112ba57611ca195611c7b611c899360c0611c9198611c8495600091611ca4575b50015190838d6124a0565b84848b8a6126db565b612773565b968795611f77565b6000526006602052604060002090565b55565b611cb991503d806000833e6118758183610f46565b38611c70565b60046040517f82fba295000000000000000000000000000000000000000000000000000000008152fd5b90919293946000956000956000956000956000956020815114611e2e575b506004815114611df6575b506020815114611dbe575b506004815114611d86575b506024815114611d355750565b610734919250611d47611d5e9161279b565b71ffffffffffffffffffffffffffffffffffff1690565b60701b7fffffffffffffffffffffffffffffffffffff00000000000000000000000000001690565b7fffff000000000000000000000000000000000000000000000000000000000000919450611db39061279b565b60f01b169238611d28565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000919650611deb9061279b565b60801b169438611d1d565b7fffff000000000000000000000000000000000000000000000000000000000000919850611e239061279b565b60f01b169638611d12565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000919a50611e5b9061279b565b60801b169838611d07565b908151916040519260028085019482800186526022600f916f30313233343536373839616263646566600f5201928401935b848103611eaf575050600082525060200160405250565b9091809360018093019284845116519082015383835160041c1651815301929190611e98565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116602082019081527fffff00000000000000000000000000000000000000000000000000000000000090921660308201527fffffffffffffffffffffffffffffffffffff0000000000000000000000000000909216603283015290611f638160448101611660565b519020600052600760205260406000205490565b91926040519260208401947fffffffffffffffffffffffffffffffff0000000000000000000000000000000080921686527fffff0000000000000000000000000000000000000000000000000000000000008094166030860152166032840152166042820152602481526060810181811067ffffffffffffffff821117610ef55760405251902090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754330361202b57565b6382b429006000526004601cfd5b9081602091031261021d5751801515810361021d5790565b6040519061205e82610ed9565b601a82527f496e74656c205347582050434b2050726f636573736f722043410000000000006020830152565b6040519061209782610ed9565b601982527f496e74656c205347582050434b20506c6174666f726d204341000000000000006020830152565b604051906120d082610ed9565b601982527f496e74656c205347582050434b204365727469666963617465000000000000006020830152565b604090610734939281528160208201520190610245565b9061212660209282815194859201610222565b0190565b6040519061213782610ed9565b8160206000918281526040519261214d84610efa565b80845280838501528060408501528060608501526060608085015260a08401520152565b91612189916121b4949361218361212a565b50611ed5565b926040519361219785610efa565b338552600060208601526001604086015260608501523691610fe2565b6080820152600060a0820152604051906121cd82610ed9565b60008252602082015290565b6080602061073492016121f0606082510151612a0e565b51015182612a91565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116602082019081527fffff000000000000000000000000000000000000000000000000000000000000909216603082015261225d8160328101611660565b519020908160005260056020526122ac7fffffffffffffffffffffffffffffffffffff000000000000000000000000000060406000209216809260019160005201602052604060002054151590565b156122b5575050565b6122cb9160005260056020526040600020612c9e565b50565b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60808183031261021d57805161ffff8116810361021d5792602091828101519267ffffffffffffffff9384811161021d5782019085601f8301121561021d5781519161237b8361102c565b926123896040519485610f46565b808452828085019160051b8301019188831161021d578301905b8282106123de575050505093604082015184811161021d57816123c791840161193d565b93606083015190811161021d57610734920161193d565b815160ff8116810361021d5781529083019083016123a3565b92919061240e602091604086526040860190610245565b930152565b90602082519201517fffff00000000000000000000000000000000000000000000000000000000000090818116936002811061244e57505050565b60020360031b82901b16169150565b60207fff00000000000000000000000000000000000000000000000000000000000000916124946001959482815194859201610222565b019160f81b1681520190565b93909291936124c76111e160035473ffffffffffffffffffffffffffffffffffffffff1690565b9460409060405180977fe81c707e00000000000000000000000000000000000000000000000000000000825281806125066000998a96600484016123f7565b03915afa9182156112ba578492859786916126ac575b5061252690612413565b907fffff00000000000000000000000000000000000000000000000000000000000080911691161495604051936125c68561258f602096602083017fffff00000000000000000000000000000000000000000000000000000000000060029260f01b1681520190565b03956125c17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe097888101835282610f46565b612b7c565b9760605b83518810156126125760019061260a6125ed6125e68b886110da565b5160ff1690565b916125fe88519384928b840161245d565b03898101835282610f46565b9701966125ca565b90979650610553945061263e93506107c392506105ac6126449692996040519586936020850190612113565b90612113565b9082159261267f575b505061265557565b60046040517f4a629e24000000000000000000000000000000000000000000000000000000008152fd5b7fffffffffffffffffffffffffffffffffffff00000000000000000000000000001614159050388061264d565b90506126d091975061252693503d8087833e6126c88183610f46565b810190612330565b91989294905061251c565b906126f09392916126ea61212a565b50611f77565b6000526006602052604060002054907fffffffffffffffffffffffffffffffffffff0000000000000000000000000000604051911660208201526020815261273781610ed9565b6040519161274483610efa565b338352600060208401526001604084015260608301526080820152600060a0820152604051906121cd82610ed9565b602060809101612787606082510151612a0e565b510151610734815160208301209182612a91565b90600091805190600190816001841160208084015160f01c17613078141660011b925b6127db575b505050156127cd57565b63101827966000526004601cfd5b909194927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff907403010a071000000b0104040208000c05090d060e0f6d03e4088843e41bac00000000000060ff85808b019a88010151161c601f161a908560fc1c82151715029460041b01019483811015612858579190806127be565b6127c3565b80548210156110ee5760005260206000200190600090565b9061287f9161285d565b90549060031b1c90565b60409182815103612a05576128f19373ffffffffffffffffffffffffffffffffffffffff6001541690845180927f6d3537a00000000000000000000000000000000000000000000000000000000082526020600483015281806000998a956024830190610245565b03915afa9081156112ba5785916129eb575b50838151036129e457938080938360019761293561292a61292f61292a6129d29b99612d26565b612c27565b93612dfc565b9061294e61292a61294861292a84612d26565b92612dfc565b9187519360208501958652888501526060840152608083015260a082015260a0815261297981610efa565b519073c2b78104907f722dabac4c69f826a522b2754de45afa903d156129d657906129c3913d6129b46129ab82610fa8565b92519283610f46565b8152809360203d92013e612c68565b60208082518301019101611189565b1490565b5090506129c3606091612c68565b5050505090565b6129ff91503d8087833e611a1a8183610f46565b38612903565b50505050600090565b612a17816119a5565b51612a1f5750565b73ffffffffffffffffffffffffffffffffffffffff6000541690813b1561021d576000916024839260405194859384927f86911cde00000000000000000000000000000000000000000000000000000000845260048401525af180156112ba57612a865750565b612a8f90610f16565b565b73ffffffffffffffffffffffffffffffffffffffff6000541691823b1561021d57612afc92600092836040518096819582947f3a91c2260000000000000000000000000000000000000000000000000000000084526004840152604060248401526044830190610245565b03925af180156112ba57612a865750565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6020039060208211612b4a57565b612b0d565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211612b4a57565b805160609291815b612b8c575050565b90927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840193808511612b4a5782518510156110ee5760217fff00000000000000000000000000000000000000000000000000000000000000601f612c1f938601015116604051938491602091612c0b81518092858088019101610222565b830191820152036001810184520182610f46565b929081612b84565b602081519101519060208110612c3b575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b15612c6f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828152600182016020526040902054612d1f5780549068010000000000000000821015610ef557612cd882600180940183558261285d565b81549060031b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86831b921b191617905580549260005201602052604060002055600190565b5050600090565b8051602090811161021d5760405191612d3e83610ed9565b81835281830190823683378280910191925b80821015612daf575080612d9057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b612da4612d9f612da992612b3c565b612e8b565b612b4f565b90612d82565b90919283518152818101809111612b4a5792818101809111612b4a57917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111612b4a5790612d50565b805160401161021d5760405190612e1282610ed9565b6020908183528183019082368337604083910191925b80821015612e3e575080612d9057509192915050565b90919283518152818101809111612b4a5792818101809111612b4a57917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111612b4a5790612e28565b601f8111612b4a576101000a9056fea264697066735822122015441861dd295d2d8a3d1e924c78a461ad7e9ae1491196a924bc8704c1ae04f564736f6c63430008180033000000000000000000000000e8599dd2366230b7efdd526985c64c7325b275690000000000000000000000001c28516e432249c88466002d918624c0aa3bf4e3000000000000000000000000ef97396527180e1be5646249f032f98e9296d75f000000000000000000000000da45ce0c78c4e77e3fe2f38bbb9f3b7227102458", - "nonce": "0xf5", + "input": "0x60a0346100f657601f61317238819003918201601f19168301916001600160401b038311848410176100fb5780849260a0946040528339810103126100f65761004781610111565b9061005460208201610111565b9061006160408201610111565b9161007a608061007360608501610111565b9301610111565b600080546001600160a01b039687166001600160a01b031991821617909155608092909252600180549386169383168417905560028054948616948316949094179093556003805482169092179091556004805492909316911617905560405161304c908161012682396080518181816109320152612dc50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036100f65756fe6080604052600436101561001257600080fd5b60003560e01c806304f3bcec1461011757806320348d8c14610112578063286858391461010d57806337b8762d146101085780633c7d71141461010357806348ac8059146100fe578063536c633d146100f957806359a517ff146100f45780635be0fa4b146100ef578063784aecf0146100ea5780637eb619c7146100e5578063b414d0b2146100e0578063bf721aaf146100db578063c925d17a146100d6578063d88d1df6146100d15763ec950d33146100cc57600080fd5b610ef8565b610ea6565b610dc0565b610c45565b610c18565b610b2a565b610a85565b6109a8565b610956565b6108e7565b61080a565b610701565b6105e5565b6103ed565b610206565b61012c565b600091031261012757565b600080fd5b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b600435907fffffffffffffffffffffffffffffffff000000000000000000000000000000008216820361012757565b602435907fffff0000000000000000000000000000000000000000000000000000000000008216820361012757565b7fffffffffffffffffffffffffffffffffffff000000000000000000000000000081160361012757565b346101275760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757602061025c61024261017e565b61024a6101ad565b60443591610257836101dc565b610fbf565b604051908152f35b9181601f840112156101275782359167ffffffffffffffff8311610127576020838186019501011161012757565b60005b8381106102a55750506000910152565b8181015183820152602001610295565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936102f181518092818752878088019101610292565b0116010190565b604081016040825282518091526060820190602060608260051b8501019401916000905b8282106103a457505050506020818303910152815180825260208201916020808360051b8301019401926000915b83831061035957505050505090565b9091929394602080610395837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0866001960301875289516102b5565b9701930193019193929061034a565b909192946020806103df837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0896001960301865289516102b5565b97019201920190929161031c565b346101275760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101275760043567ffffffffffffffff81116101275761043c903690600401610264565b9060243567ffffffffffffffff81116101275761047c61046361049b923690600401610264565b9190610474606095869736916110c3565b9236916110c3565b6104846110fa565b61048c6110fa565b916104956110fa565b93611aab565b5050506104a88183611c3d565b91825190816104c5575b604051806104c18888836102f8565b0390f35b9193509193506104d482611127565b926104de83611127565b9460005b8481106104ef57506104b2565b8061059461056361058f61052e610508600196886111bd565b517fffffffffffffffffffffffffffffffffffff00000000000000000000000000001690565b604051928391602083017fffffffffffffffffffffffffffffffffffff00000000000000000000000000006012921681520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610f79565b611d89565b61059e82896111bd565b526105a981886111bd565b506105c96105c46105bd61050884876111bd565b8688610fbf565b612573565b6105d3828a6111bd565b526105de81896111bd565b50016104e2565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101275760043567ffffffffffffffff8111610127578161068091600401610264565b9290929160243567ffffffffffffffff811161012757816106a391600401610264565b9290929160443567ffffffffffffffff811161012757816106c691600401610264565b929092916064359067ffffffffffffffff8211610127576106e991600401610264565b9091565b9060206106fe9281815201906102b5565b90565b346101275761047461074661077c61077761076961074e61073e61072436610637565b989660009e95949d93969e989192985060609e36916110c3565b9736916110c3565b9936916110c3565b90602096604051936107608986610f79565b60008552611aab565b5090828496949593956118d5565b611df0565b917fffffffffffffffffffffffffffffffffffff000000000000000000000000000083166107bc575b5050506104c16040519283928084528301906102b5565b6107cd939450906105c49291610fbf565b903880806107a5565b60043590600482101561012757565b90916107fc6106fe936040845260408401906102b5565b9160208184039101526102b5565b346101275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610127576108416107d6565b60048110156108b857801580156108a5575b610870576108609061125a565b906104c1604051928392836107e5565b600461089f917f9849e774000000000000000000000000000000000000000000000000000000006000526111e0565b60246000fd5b506108af816111d6565b60038114610853565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346101275760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610127576109df6107d6565b60243567ffffffffffffffff8111610127576109ff903690600401610264565b919060443567ffffffffffffffff811161012757610a21903690600401610264565b60649391933567ffffffffffffffff811161012757610a44903690600401610264565b916084359567ffffffffffffffff8711610127576104c197610a6d610a75983690600401610264565b979096611346565b6040519081529081906020820190565b346101275760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757610abc61017e565b610ac46101ad565b906044357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116810361012757606435907fffff000000000000000000000000000000000000000000000000000000000000821682036101275760209361025c936118d5565b3461012757610474610b847fffffffffffffffffffffffffffffffffffff0000000000000000000000000000610ba8610777610b9e61073e610b8c610b6e36610637565b9796959e94919d929398909560609f36916110c3565b9a36916110c3565b90602097604051936107608a86610f79565b50929190916118d5565b1680610bc4575b506104c16040519283928084528301906102b5565b610be191925060405190838201526012815261058f603282610f79565b9038610baf565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60209101126101275760043590565b34610127576104c1610c31610c2c36610be8565b612297565b6040519182916020835260208301906102b5565b3461012757610cce610c5636610be8565b6020600091610c95610c7c845473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b60405180809681947fe973fddc000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa918215610d8c57610d419282918291610d91575b50610d08610c7c835473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809681947f9e5464b2000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa8015610d8c576020928261025c9392610d69575b50508280825183010191016111fb565b610d8592503d8091833e610d7d8183610f79565b810190612271565b3880610d59565b61124e565b610db3915060203d602011610db9575b610dab8183610f79565b8101906111fb565b38610ce6565b503d610da1565b346101275760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101275760043567ffffffffffffffff811161012757610e0f903690600401610264565b60243567ffffffffffffffff811161012757610e2f903690600401610264565b91909260443567ffffffffffffffff811161012757610e52903690600401610264565b9060643567ffffffffffffffff811161012757610e73903690600401610264565b9290916084359667ffffffffffffffff8811610127576104c198610e9e610a75993690600401610264565b98909761196f565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610fba57604052565b610f4a565b917fffffffffffffffffffffffffffffffffffff0000000000000000000000000000907fffff000000000000000000000000000000000000000000000000000000000000604051937fffffffffffffffffffffffffffffffff0000000000000000000000000000000060208601967ff0e2a24600000000000000000000000000000000000000000000000000000000885216602486015216603484015216603682015260288152611071604882610f79565b51902090565b6040519061108761012083610f79565b565b67ffffffffffffffff8111610fba57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926110cf82611089565b916110dd6040519384610f79565b829481845281830111610127578281602093846000960137010152565b60405190611109602083610f79565b60008252565b67ffffffffffffffff8111610fba5760051b60200190565b906111318261110f565b61113e6040519182610f79565b82815260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061116e839561110f565b01910160005b82811061118057505050565b606082820152602001611174565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156111d15760209160051b010190565b61118e565b600411156108b857565b9060048210156108b85752565b9061108760046024936111e0565b90816020910312610127575190565b60206000919392936112208160408101966111e0565b0152565b9060006020604084019361122081846111e0565b60206001919392936112208160408101966111e0565b6040513d6000823e3d90fd5b906112b66020611282610c7c60025473ffffffffffffffffffffffffffffffffffffffff1690565b93604051809381927fb13bf2900000000000000000000000000000000000000000000000000000000083526004830161120a565b0381865afa8015610d8c576112d391600091611327575b50612573565b91602060405180927fb13bf290000000000000000000000000000000000000000000000000000000008252818061130c60048201611224565b03915afa8015610d8c576106fe916000916113275750612573565b611340915060203d602011610db957610dab8183610f79565b386112cd565b9591979493929060048710156108b857861580156118c2575b611891576113b293929161137a6113829260009b36916110c3565b9336916110c3565b93602094610495604051926113978885610f79565b8b8452604051946113a88987610f79565b8c865236916110c3565b97939892969150506113c53686856110c3565b936113e8610c7c60035473ffffffffffffffffffffffffffffffffffffffff1690565b906040517fed33378500000000000000000000000000000000000000000000000000000000815281818061141f8a600483016106ed565b0381865afa908115610d8c578591611874575b501561184c578360405180937f3b79a61e00000000000000000000000000000000000000000000000000000000825281806114708b600483016106ed565b03915afa918215610d8c578492611828575b50610100820192835182815191012096606061149d836111d6565b600283036117f357506114d06114cc6114b461202a565b85870151906020815191012090602081519101201490565b1590565b6117cb576114fa6114cc60808601516114e7612065565b6020815191012090602081519101201490565b6117a35760c084015161150e918c8c612892565b611530610c7c60025473ffffffffffffffffffffffffffffffffffffffff1690565b90604051907fb13bf2900000000000000000000000000000000000000000000000000000000082528382806115688460048301611238565b0381865afa918215610d8c57849261158791899161178c575b50612297565b9283516116b4575b6115c8935060405180809581947fb13bf2900000000000000000000000000000000000000000000000000000000083526004830161120a565b03915afa8015610d8c576115e29186916116975750612297565b80519093901561166f576115fe859151604051918280926120b7565b039060025afa15610d8c5761161e916114cc9160e0855191015190612aed565b6116475750916116419161163c6106fe96959461137a87878b610fbf565b6120ce565b93612182565b807fe7ef341f0000000000000000000000000000000000000000000000000000000060049252fd5b6004857fcd69d374000000000000000000000000000000000000000000000000000000008152fd5b6116ae9150833d8511610db957610dab8183610f79565b38611581565b9161171391936116dc610c7c60045473ffffffffffffffffffffffffffffffffffffffff1690565b87516040518095819482937fcedb9781000000000000000000000000000000000000000000000000000000008452600484016120a0565b03915afa908115610d8c57879161175f575b506117325781839161158f565b83517f167c231a000000000000000000000000000000000000000000000000000000008752600452602486fd5b61177f9150843d8611611785575b6117778183610f79565b810190611e86565b38611725565b503d61176d565b6116ae9150843d8611610db957610dab8183610f79565b6004867f92ec707e000000000000000000000000000000000000000000000000000000008152fd5b6004867f1e7ab599000000000000000000000000000000000000000000000000000000008152fd5b6117fc836111d6565b60018314611811575b6114cc6114d0916114b4565b506114d06114cc611820611fef565b915050611805565b6118459192503d8086833e61183d8183610f79565b810190611ee0565b9038611482565b6004847fdba942a2000000000000000000000000000000000000000000000000000000008152fd5b61188b9150823d8411611785576117778183610f79565b38611432565b6118be877f9849e774000000000000000000000000000000000000000000000000000000006000526111ed565b6000fd5b506118cc876111d6565b6003871461135f565b927fffffffffffffffffffffffffffffffff000000000000000000000000000000007fffff000000000000000000000000000000000000000000000000000000000000929383604051958360208801987f5b8e7b4e000000000000000000000000000000000000000000000000000000008a5216602488015216603486015216603684015216604682015260288152611071604882610f79565b6104959461199a6119aa946119926119a2946119b29e9c9b969d989d36916110c3565b9b36916110c3565b9636916110c3565b9536916110c3565b9436916110c3565b93926119c5610c2c868387969596610fbf565b5115611a81576119d4936118d5565b73ffffffffffffffffffffffffffffffffffffffff6000541691823b15610127576044600092837fffffffffffffffffffffffffffffffffffff00000000000000000000000000009560405196879586947faf9307f500000000000000000000000000000000000000000000000000000000865260048601521660248401525af18015610d8c57611a66575b50600090565b80611a756000611a7b93610f79565b8061011c565b38611a60565b7f82fba2950000000000000000000000000000000000000000000000000000000060005260046000fd5b90919293946000956000956000956000956000956020815114611bf3575b506004815114611bda575b506020815114611b8a575b506004815114611b48575b506024815114611af75750565b6106fe919250611b09611b20916124a4565b71ffffffffffffffffffffffffffffffffffff1690565b60701b7fffffffffffffffffffffffffffffffffffff00000000000000000000000000001690565b611b83919450611b5a61ffff916124a4565b1660f01b7fffff0000000000000000000000000000000000000000000000000000000000001690565b9238611aea565b611bd3919650611baa6fffffffffffffffffffffffffffffffff916124a4565b1660801b7fffffffffffffffffffffffffffffffff000000000000000000000000000000001690565b9438611adf565b611bec919850611b5a61ffff916124a4565b9638611ad4565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000919a50611c316fffffffffffffffffffffffffffffffff916124a4565b1660801b169838611ac9565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000604460009273ffffffffffffffffffffffffffffffffffffffff8454167fffff00000000000000000000000000000000000000000000000000000000000060405196879586947fa192c81d0000000000000000000000000000000000000000000000000000000086521660048501521660248301525afa908115610d8c57600091611ce7575090565b3d8083833e611cf68183610f79565b810190602081830312611d815780519067ffffffffffffffff8211611d85570181601f82011215611d8157805190611d2d8261110f565b93611d3b6040519586610f79565b82855260208086019360051b830101938411611d7e5750602001905b828210611d645750505090565b602080918351611d73816101dc565b815201910190611d57565b80fd5b8280fd5b8380fd5b90815191604051926022600285019482800186526f30313233343536373839616263646566600f5201908201915b828103611dcc57506000815260200160405250565b60016002910191600f835116516001820153600f835160041c165181530190611db7565b602073ffffffffffffffffffffffffffffffffffffffff60005416916024604051809481937f1d345bc600000000000000000000000000000000000000000000000000000000835260048301525afa908115610d8c57600091611e51575090565b90506020813d602011611e7e575b81611e6c60209383610f79565b8101031261012757516106fe816101dc565b3d9150611e5f565b90816020910312610127575180151581036101275790565b81601f820112156101275760208151910190611eb981611089565b92611ec76040519485610f79565b81845281830111610127576106fe916020840190610292565b6020818303126101275780519067ffffffffffffffff821161012757016101208183031261012757611f10611077565b9181518352602082015167ffffffffffffffff81116101275781611f35918401611e9e565b60208401526040820151604084015260608201516060840152608082015167ffffffffffffffff81116101275781611f6e918401611e9e565b608084015260a082015167ffffffffffffffff81116101275781611f93918401611e9e565b60a084015260c082015160c084015260e082015167ffffffffffffffff81116101275781611fc2918401611e9e565b60e084015261010082015167ffffffffffffffff811161012757611fe69201611e9e565b61010082015290565b60405190611ffe604083610f79565b601a82527f496e74656c205347582050434b2050726f636573736f722043410000000000006020830152565b60405190612039604083610f79565b601982527f496e74656c205347582050434b20506c6174666f726d204341000000000000006020830152565b60405190612074604083610f79565b601982527f496e74656c205347582050434b204365727469666963617465000000000000006020830152565b6040906106fe9392815281602082015201906102b5565b906120ca60209282815194859201610292565b0190565b6040919261213391600073ffffffffffffffffffffffffffffffffffffffff815416928551968795869485937f5778ea3200000000000000000000000000000000000000000000000000000000855260048501526060602485015260648401906102b5565b90604483015203925af1908115610d8c5760009161214f575090565b6040813d60401161217a575b8161216860409383610f79565b810103126121765751919050565b5080fd5b3d915061215b565b909173ffffffffffffffffffffffffffffffffffffffff60005416803b1561012757600092836064927fffffffffffffffffffffffffffffffffffff00000000000000000000000000007fffffffffffffffffffffffffffffffff00000000000000000000000000000000957fffff000000000000000000000000000000000000000000000000000000000000604051998a9889977faa1b52950000000000000000000000000000000000000000000000000000000089521660048801521660248601521660448401525af18015610d8c5761225b5750565b8061226860008093610f79565b80031261012757565b9060208282031261012757815167ffffffffffffffff8111610127576106fe9201611e9e565b60206122f8916122bf610c7c60005473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947f7fc1ca02000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa908115610d8c5761236c916000918291612397575b50612333610c7c835473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947f9e5464b2000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa908115610d8c57600091612382575090565b6106fe91503d806000833e610d7d8183610f79565b6123b0915060203d602011610db957610dab8183610f79565b38612311565b901561243e5760206122f8916123e4610c7c60005473ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947fe973fddc000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b612333610c7c835473ffffffffffffffffffffffffffffffffffffffff1690565b6020612466916122bf610c7c60005473ffffffffffffffffffffffffffffffffffffffff1690565b03915afa908115610d8c5761236c916000918291612485575b5061241d565b61249e915060203d602011610db957610dab8183610f79565b3861247f565b90600082517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821160208087015160f01c17613078141660011b915b7403010a071000000b0104040208000c05090d060e0f6d03e4088843e41bac00000000000060ff6001808701968a010151161c601f161a908460fc1c82151715029360041b0101908281101561255b5790917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906124e2565b5092501561256557565b63101827966000526004601cfd5b9060609161259f610c7c610c7c610c7c60005473ffffffffffffffffffffffffffffffffffffffff1690565b604051907f5c975abb000000000000000000000000000000000000000000000000000000008252602082600481845afa918215610d8c5760009261266b575b5081156125fc575b506125ee5750565b6106fe9192506000906123b6565b6040517f59d14b410000000000000000000000000000000000000000000000000000000081523360048201529150602090829060249082905afa908115610d8c5760009161264c575b50386125e6565b612665915060203d602011611785576117778183610f79565b38612645565b61268591925060203d602011611785576117778183610f79565b90386125de565b9060808282031261012757815161ffff811681036101275792602083015167ffffffffffffffff811161012757830182601f820112156101275780516126d18161110f565b916126df6040519384610f79565b81835260208084019260051b8201019085821161012757602001915b8183106127455750505092604081015167ffffffffffffffff81116101275783612726918301611e9e565b92606082015167ffffffffffffffff8111610127576106fe9201611e9e565b825160ff81168103610127578152602092830192016126fb565b9291906127766020916040865260408601906102b5565b930152565b90602082519201517fffff000000000000000000000000000000000000000000000000000000000000811692600281106127b3575050565b7fffff000000000000000000000000000000000000000000000000000000000000929350829060020360031b1b161690565b60207fff000000000000000000000000000000000000000000000000000000000000009161281c6001959482815194859201610292565b019160f81b1681520190565b90602082519201517fffffffffffffffffffffffffffffffffffff000000000000000000000000000081169260128110612860575050565b7fffffffffffffffffffffffffffffffffffff0000000000000000000000000000929350829060120360031b1b161690565b926000906128f49592936128be610c7c60035473ffffffffffffffffffffffffffffffffffffffff1690565b906040518098819482937fe81c707e0000000000000000000000000000000000000000000000000000000084526004840161275f565b03915afa928315610d8c57600093600095600091612a89575b50612981612986927fffff000000000000000000000000000000000000000000000000000000000000806129436105639561277b565b921691161495604051928391602083017fffff00000000000000000000000000000000000000000000000000000000000060029260f01b1681520190565b612c0e565b9260009260605b86518510156129cb576001906129c36129b06129a9888b6111bd565b5160ff1690565b91610563604051938492602084016127e5565b94019361298d565b7fffffffffffffffffffffffffffffffffffff0000000000000000000000000000939650612a1f919450612a1a612a1491610563612a44959860405194859360208501906120b7565b906120b7565b612828565b7fffffffffffffffffffffffffffffffffffff00000000000000000000000000001690565b911614811591612a80575b50612a5657565b7f4a629e240000000000000000000000000000000000000000000000000000000060005260046000fd5b90501538612a4f565b7fffff0000000000000000000000000000000000000000000000000000000000009650612943955061056391506129869287612ada612981933d806000833e612ad28183610f79565b81019061268c565b9b92905099909a9550505050925061290d565b91906040815103612b7a576000612b549273ffffffffffffffffffffffffffffffffffffffff80600154161660405180809681947f6d3537a000000000000000000000000000000000000000000000000000000000835260206004840181815201906102b5565b03915afa918215610d8c57600092612b82575b506040825103612b7a576106fe92612d51565b505050600090565b612b989192503d806000833e610d7d8183610f79565b9038612b67565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6020039060208211612bdc57565b612b9f565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211612bdc57565b805160609291815b612c1e575050565b90927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840193808511612bdc5782518510156111d157600160207fff00000000000000000000000000000000000000000000000000000000000000601f612cd2948701015116936040519481612c9d8793518092868087019101610292565b8201908382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810184520182610f79565b929081612c16565b602081519101519060208110612cee575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b15612d2257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008091612e2693600195612d79612d6e612d73612d6e85612e35565b612cda565b93612f43565b90612d92612d6e612d8c612d6e84612e35565b92612f43565b91604051936020850195865260408501526060840152608083015260a082015260a08152612dc160c082610f79565b51907f00000000000000000000000000000000000000000000000000000000000000005afa3d15612e2a57612e173d91612dfa83611089565b92612e086040519485610f79565b83523d6000602085013e612d1b565b602080825183010191016111fb565b1490565b612e17606091612d1b565b805160201161012757612e486020611089565b90612e566040519283610f79565b60208252612e646020611089565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237602080920190915b6020811015612ef55780612ed657507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b612eea612ee5612eef92612bce565b613007565b612be1565b90612ec8565b90918251815260208101809111612bdc579160208101809111612bdc57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115612e9657612b9f565b805160401161012757612f566020611089565b90612f646040519283610f79565b60208252612f726020611089565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060400160205b6020811015612fb95780612ed657509192915050565b90918251815260208101809111612bdc579160208101809111612bdc57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115612fa357612b9f565b601f8111612bdc576101000a9056fea2646970667358221220f848ffd475ca8233b7772cb538bc941dd0e2de94d8bf9de2271909d00dab9b2164736f6c634300081b00330000000000000000000000002bbc0ccc218e63ad4d2bbb7bde1375b092fd38a20000000000000000000000000000000000000000000000000000000000000100000000000000000000000000cf171acd6c0a776f9d3e1f6cac8067c982ac6ce10000000000000000000000004aca9c0eb063401c9f5c2fc4487dbc5ccf1c9e2b0000000000000000000000006e204feae40f668a06e78a83b66185ffc8892dda", + "nonce": "0xb", "chainId": "0x1555e3" }, "additionalContracts": [], @@ -27,47 +28,31 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x2b0d6d", - "logs": [ - { - "address": "0x1d6339a89d6fa63cef4251cd50fd1f50e13afb41", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000003d089c2f2cb86d4efde153c81cabd4579784430b" - ], - "data": "0x", - "blockHash": "0xe45b1586a9993d3a91406f14bff1e0e7b1293219adef7ba60d1a9313df6c608e", - "blockNumber": "0x9f710", - "transactionHash": "0x3ccb390761806a26bdde759c4b007d0443af3206125a1eccdda96a4d84934cb1", - "transactionIndex": "0x1", - "logIndex": "0x0", - "removed": false - } - ], - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000001000000000000800000000000000000000000000000000400000000000000000020080000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000004000000000000000000000000000000000000000000000000000", + "cumulativeGasUsed": "0x2bb552", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x3ccb390761806a26bdde759c4b007d0443af3206125a1eccdda96a4d84934cb1", + "transactionHash": "0x5e3db94637714167740544ec9299139d2ac556bb1b15917d271df5dd0ae08590", "transactionIndex": "0x1", - "blockHash": "0xe45b1586a9993d3a91406f14bff1e0e7b1293219adef7ba60d1a9313df6c608e", - "blockNumber": "0x9f710", - "gasUsed": "0x2a362f", + "blockHash": "0x4958695e768bbebe476f50256a99820a93b8c95f7fdaca96f64348e27a40df78", + "blockNumber": "0x63b0f4", + "gasUsed": "0x2b0a04", "effectiveGasPrice": "0xfd", - "from": "0x3d089c2f2cb86d4efde153c81cabd4579784430b", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", "to": null, - "contractAddress": "0x1d6339a89d6fa63cef4251cd50fd1f50e13afb41", + "contractAddress": "0x722525b96b62e182f8a095af0a79d4ea2037795c", "l1BaseFeeScalar": "0x558", - "l1BlobBaseFee": "0x76b5324b4", + "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xc5fc5", - "l1Fee": "0x932b85c61b8f", - "l1GasPrice": "0x6396314ae", - "l1GasUsed": "0x17eb4" + "l1Fee": "0x637a644aa5", + "l1GasPrice": "0xc51ec855", + "l1GasUsed": "0x170e6" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1720172036, + "timestamp": 1731932620, "chain": 1398243, - "commit": "ec96ab5" + "commit": "9884122" } \ No newline at end of file diff --git a/broadcast/DeployHelpers.s.sol/1398243/deployEnclaveIdentityHelper-latest.json b/broadcast/DeployHelpers.s.sol/1398243/deployEnclaveIdentityHelper-latest.json index c2d6922..fed1688 100644 --- a/broadcast/DeployHelpers.s.sol/1398243/deployEnclaveIdentityHelper-latest.json +++ b/broadcast/DeployHelpers.s.sol/1398243/deployEnclaveIdentityHelper-latest.json @@ -1,18 +1,18 @@ { "transactions": [ { - "hash": "0x3cf97f782ce8d299e540fe7273b8e54aa9a9fd535f679986bdfc0d3616453c6f", + "hash": "0x5d5fa00f4860a2418b8b4fc21b5c66f6ad4769280331f280a61dab898548f3d5", "transactionType": "CREATE", "contractName": "EnclaveIdentityHelper", - "contractAddress": "0xfd4a34b578b352fe1896cdafaeb0f45f993352bf", + "contractAddress": "0xae27d762eed6958bc34b358bd7c78c7211fe77f8", "function": null, "arguments": null, "transaction": { - "from": "0x3d089c2f2cb86d4efde153c81cabd4579784430b", - "gas": "0x303c1c", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", + "gas": "0x31cff1", "value": "0x0", - "input": "0x6080806040523461001657612b38908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c63c0ed97731461002757600080fd5b34610f8f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610f8f5760043567ffffffffffffffff8111610f8f5736602382011215610f8f5780600401359067ffffffffffffffff8211610f8f573660248383010111610f8f57610102906100a0611018565b50600060206100ad611018565b948060246100e1847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601610fd4565b958287520183860137830101526100f6610f94565b60008152604052612698565b61010b81612714565b60005b61011783612714565b51811015610dfc5761012981836110bf565b5161013b610136826110d3565b611229565b7f69737375654461746500000000000000000000000000000000000000000000006020610166610fb4565b6009815201528051907f6076d2bbe55ad3c4b6ee7953ef9ae2e5b181f22d3eba84d569dbda4b99713e8260208201928320146000146101d35750506101179167ffffffffffffffff6101c46101bf6101366001956124fb565b611557565b1660408701525b01905061010e565b6101db610fb4565b7f6e657874557064617465000000000000000000000000000000000000000000006020600a9283815201527f763eaaeea7af2e6dd24f817d656a3a2f55700b655f70efd88231fddddb3c8228825184201460001461025f575050506101179167ffffffffffffffff6102546101bf6101366001956124fb565b1660608701526101cb565b7f6964000000000000000000000000000000000000000000000000000000000000602061028a610fb4565b600281520152815183207fa709fd3aa96d9faf770e44a5aef2f4808a6fe3a5ddf546568f36ad3a3873f31d0361043e575050506101366102c9916124fb565b7f514500000000000000000000000000000000000000000000000000000000000060206102f4610fb4565b6002815201528051907f92d0cd3eba06fc871a8ce75aa3a118281eb4fae949bdb178e3efe8d9fd644525602082019283201460001461033e575050600161011791600086526101cb565b7f51564500000000000000000000000000000000000000000000000000000000006020610369610fb4565b600381520152805182207f2fb474852ebc3fe034f7e1ae5a7b9bef7ecc6ec335a26e41ba919461c688a977036103a95750506001610117918186526101cb565b907f764c56994ed21d522232e8d6957d7041137c17a68c129db5c6ac324d92d33c86917f54445f514500000000000000000000000000000000000000000000000000000060206103f7610fb4565b6005815201525190200361041457600161011791600286526101cb565b60046040517f1423e927000000000000000000000000000000000000000000000000000000008152fd5b7f76657273696f6e000000000000000000000000000000000000000000000000006020610469610fb4565b600781520152815183207fba1b4dd49a85c82b73f138b112d5135149203ed36c1ec80c46f8c572daa7c5ec036104c3575050506101179163ffffffff6104b86104b36001946124fb565b611416565b1660208701526101cb565b7f7463624576616c756174696f6e446174614e756d62657200000000000000000060206104ee610fb4565b601781520152815183207f4e781c4bf4f96634340ceb53dcdb4730bdc24be94fdc96d345fdaa60d3d6d7b903610543575050506101179163ffffffff6105386104b36001946124fb565b1660808701526101cb565b7f6d69736373656c65637400000000000000000000000000000000000000000000602061056e610fb4565b8381520152815183207f355e097d35df62dadf6ff6c8a506f838c49019cee633e5834f0c8328a79243be036105e957505050610117917fffffffff000000000000000000000000000000000000000000000000000000006105db6105d66101366001956124fb565b6114a3565b60e01b1660a08701526101cb565b6105f1610fb4565b907f6d69736373656c6563744d61736b0000000000000000000000000000000000006020600e9384815201527f52b593a1791fdc596f47be468717d77cb65fb4ca41a49cc2251c93a07ee007e383518520146000146106925750505050610117917fffffffff000000000000000000000000000000000000000000000000000000006106846105d66101366001956124fb565b60e01b1660c08701526101cb565b60207f6174747269627574657300000000000000000000000000000000000000000000916106be610fb4565b9081520152815183207fa400e15477493b58388b48f7b160ed2fb67c4a5ddc41d82fa2a63f904d2e622b0361073457505050610117917fffffffffffffffffffffffffffffffff000000000000000000000000000000006107266105d66101366001956124fb565b60801b1660e08701526101cb565b60207f617474726962757465734d61736b00000000000000000000000000000000000091610760610fb4565b9081520152805182207f17c4cfec1552be72636a92eab6688a6f9dc4a883e1e7d7f4bbacb37d473e14b5036107d6575050610117917fffffffffffffffffffffffffffffffff000000000000000000000000000000006107c76105d66101366001956124fb565b60801b166101008701526101cb565b7f6d727369676e65720000000000000000000000000000000000000000000000006020610801610fb4565b600881520152805182207fc6289de500ffb547b5e0b7a91f7777325c606b45d58329945f4f303ea7a9424a03610853575050610117916108486105d66101366001946124fb565b6101208701526101cb565b7f69737670726f6469640000000000000000000000000000000000000000000000602061087e610fb4565b600981520152805182207f930cd84e6ba04258f5ad32400f8aaf42263bb2b57105dab5bedd61b2bf8ceb75036108d15750506101179161ffff6108c56104b36001946124fb565b166101408701526101cb565b907fd6d591efa424a0827fb062970a57c851088716066a090ed22b00fe6502c11435917f7463624c6576656c730000000000000000000000000000000000000000000000602061091f610fb4565b6009815201525190201461093a575b506001610117916101cb565b61094661094e916124fb565b6100f6610f94565b61096061095a826128a7565b916128a7565b5161097261096d826113fe565b610fd4565b918183527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06109a0836113fe565b0160005b818110610d8957505060005b8281106109c757505050610160850152600161092e565b6109da6109d482846110bf565b516128a7565b516109e86109d483856110bf565b60005b8281106109fd575050506001016109b0565b80610a16610136610a10600194866110bf565b516110d3565b610a1e610fb4565b907f74636200000000000000000000000000000000000000000000000000000000006020600393848152015280517f4030b14cdfc8fe1ef57f74f5c81fbdb05eb1ddd8761b287757c0be02f5788ab96020830191822014600014610b2d57505050610a8c6109d482856110bf565b7f22402e2860cb074cd5b23d7be21f9d4928c0842771359c97717295e5cb1af67c610abc610136610a1084611083565b7f69737673766e00000000000000000000000000000000000000000000000000006020610ae7610fb4565b6006815201526020815191012014610b02575b505b016109eb565b610b1a6104b3610b1461ffff93611083565b516124fb565b16610b25868a6110bf565b515238610afa565b7f74636244617465000000000000000000000000000000000000000000000000006020610b58610fb4565b600781520152815181207f5add4344b96eb4a412e6c34fcb56b6f1f9be776dbb6917001ce8245b90d0419b03610bb257505050610b9e6101bf610136610b1484876110bf565b6020610baa878b6110bf565b510152610afc565b7f8ccaeed3ed0825b5048ee5eaf2994841e462373ff830e62b0e66e06e56cd20d6917f74636253746174757300000000000000000000000000000000000000000000006020610bff610fb4565b60098152015251902014610c14575b50610afc565b610c24610136610b1484876110bf565b7f5570546f446174650000000000000000000000000000000000000000000000006020610c4f610fb4565b6008815201528051602082019081207f8dd11fcce5839087111530125177803569655488ae47b1f980ef0b1a711bf07c03610c9e57505050816040610c94878b6110bf565b5101525b38610c0e565b7f5265766f6b6564000000000000000000000000000000000000000000000000006020610cc9610fb4565b600781520152815181207f78b54e92f33559320da4a0c1454741ea1f5c5fa31eb1dd482882c6df0231e47803610d125750505060026040610d0a878b6110bf565b510152610c98565b7fe1dbc1592712cb224ab58df345a7bffafe7d5092dc9eff532076ee2c5e687099917f4f75744f664461746500000000000000000000000000000000000000000000006020610d5f610fb4565b60098152015251902014610d74575b50610c98565b6040610d80878b6110bf565b51015238610d6e565b6040519081606081011067ffffffffffffffff606084011117610dcd57816060602093016040526000815260008382015260006040820152828288010152016109a4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b83604051602081526101a0810182516003811015610f6057602083015260208301519063ffffffff809216604084015260408401519167ffffffffffffffff60609316606085015267ffffffffffffffff606086015116608085015260808501511660a084015260a08401517fffffffff0000000000000000000000000000000000000000000000000000000080911660c085015260c08501511660e084015260e08401516101007fffffffffffffffffffffffffffffffff0000000000000000000000000000000080921681860152850151906101209116818501528401516101409081850152840151936101609061ffff8096168286015201519161018080850152825180925260206101c085019301946000905b838210610f205785850386f35b9091929360408751838151168352602081015160208401520151906004821015610f60578481600193604060209401520197019201909593929195610f13565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080fd5b604051906020820182811067ffffffffffffffff821117610dcd57604052565b604051906040820182811067ffffffffffffffff821117610dcd57604052565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff821117610dcd57604052565b60405190610180820182811067ffffffffffffffff821117610dcd57604052606061016083600080825280602083015280604083015280848301528060808301528060a08301528060c08301528060e083015280610100830152806101208301526101408201520152565b8051156110905760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156110905760209160051b010190565b9060609160808151166110e35750565b6110ee9192506125cc565b90565b63101827966000526004601cfd5b9160009260049060048101938411159051600080935b808503611123575050505050565b909192939683881a907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09182810187667e0000007e03ff821c161561118957908160076010603060019796951160051b92110201900390841b0101970193929190611115565b8463101827968752601cfd5b90607f81111561121f5780601f538060061c601e536107ff8111156112075780600c1c601d5361ffff8111156111ed5780621100009160121c601c5360005163073f3f3f1663f08080801760e01b83521060021b0190565b50600390600051620f3f3f1662e080801760e81b81520190565b50600290600051611f3f1661c0801760f01b81520190565b9060019181530190565b908151601f8184010190815191600092600290841a600287015161ff00161761222214600180941116156113f15760216020604094939451019601905b8382036112a6575050505082526020604051927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084820301845201604052565b90919295838396959651871a930192605c81036113cc575b508683036112d4575b631018279686526004601cfd5b838351871a930192846b100000000000800400000000821c166113bd57876075821461135157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffab72080000000c000000000000000a0000000d000991011a8061133e57506112c7565b908491819796975301955b929190611266565b611364915061137f9294889798506110ff565b818161dbff821161d80083101715611385575b505093611195565b95611349565b620ffc0093506113a491925085615c75825160f01c148c0291016110ff565b92906103ff1691600a1b16016201000001903880611377565b90849181979697530195611349565b602281949294036113e15750508591386112be565b9284919381979697530195611349565b631018279684526004601cfd5b67ffffffffffffffff8111610dcd5760051b60200190565b9060009180516000905b60ff826001809101938501015116947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09060097f1999999999999999999999999999999999999999999999999999999999999999821191600a029280898501019801119187101717150290818110156114995790611420565b509050156110f157565b90600091805190600190816001841160208084015160f01c17613078141660011b925b6114d5575b505050156110f157565b909194927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff907403010a071000000b0104040208000c05090d060e0f6d03e4088843e41bac00000000000060ff85808b019a88010151161c601f161a908560fc1c82151715029460041b01019483811015611552579190806114c6565b6114cb565b60148151036119fb5760006004606090835160048111156119f3575b80156119eb575b5080831061197d575b5061158e91506129e4565b906005600760609083516007811115611975575b600581111561196d575b508083106118ff575b506115c091506129e4565b6008600a6060908451600a8111156118f7575b60088111156118ef575b50808310611881575b506115f191506129e4565b90600b600d6060908551600d811115611879575b600b811115611871575b50808310611803575b5061162391506129e4565b92600e6010606090835160108111156117fb575b600e8111156117f3575b50808310611785575b5061165591506129e4565b9060119060136060928251601381111561177d575b6011811115611775575b508181106116fd575b5050509162023ab17ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff50593926116b462015180956129e4565b976003841090039261019091610e10603c8487069202990297610301600c60096064850495010661f4ff0201600b1c019061016d8160021c910201010392040201010201010190565b604051918190038083529591949193507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0920182601f870181165b80830151818801520190811561175057908390611738565b5050600060208587010152603f909401168201604052919062023ab1826116b461167d565b905038611674565b91508161166a565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908180601f8601165b8083015181860152019081156117d5579082906117bd565b5050603f61165593600060208286010152011681016040523861164a565b925038611641565b905080611637565b90508160405191039182825285017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908180601f8601165b8083015181860152019081156118535790829061183b565b5050603f611623936000602082860101520116810160405238611618565b92503861160f565b905080611605565b90508160405191039182825284017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908180601f8601165b8083015181860152019081156118d1579082906118b9565b5050603f6115f19360006020828601015201168101604052386115e6565b9250386115dd565b9050806115d3565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908180601f8601165b80830151818601520190811561194f57908290611937565b5050603f6115c09360006020828601015201168101604052386115b5565b9250386115ac565b9050806115a2565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908180601f8601165b8083015181860152019081156119cd579082906119b5565b5050603f61158e936000602082860101520116810160405238611583565b92503861157a565b905080611573565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f696e76616c69642069736f20737472696e67206c656e677468000000000000006044820152fd5b5b6001640100002600825160001a1c16156110ee57600101611a5a565b9063ffffffff81113d3d3e60181b907fffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffff161790565b9063ffffffff81113d3d3e60981b907fffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffff161790565b9063ffffffff81113d3d3e60381b907fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff161790565b9063ffffffff81113d3d3e60b81b907fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff161790565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600495949796978560405199039503019363ffffffff8086113d3d3e81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600595949796978560405199039503019363ffffffff8086113d3d3e81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600695949796978560405199039503019363ffffffff8086113d3d3e81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600195949796978560405199039503019363ffffffff8086113d3d3e81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600295949796978560405199039503019363ffffffff8086113d3d3e81113d3d3e60781b9360581b169116171717825260208201604052565b9091611e76611e706000969594600051611a76565b91611a59565b9280841015611fc357835160001a60228114605b8214607b83149160016703ff20000000000081951c1693611eb6575b505050505050506110ee90611a59565b9091929394959850611fa457611f9657611f7857611f5c5760048084019082821115611f16575b5050600583019081116110f1576466616c7365835160d81c036110f1576110ee92611f09928296611be7565b9290388080808080611ea6565b8491855160e01c9063747275658214611f485750636e756c6c03611edd57611f09939692506110ee9401958692611c84565b935050506110ee9350611f09928296611be7565b5090611f6b916110ee94612340565b9092388080808080611ea6565b509190611f8593946120b2565b9091906110ee388080808080611ea6565b50509190611f859394611fc9565b5050509382611fbb611f0993966110ee959261223f565b958692611b4a565b50505090565b916000929493946000806001809860018601995b612003575b50505050611ffa600161200095969701958694611ae0565b90611d21565b91565b9196909298828110156120ad5782908215612086575b6120239286611e5b565b909690808880612042575b50505090829182825b019993919092611fdd565b9a8b612055828894959e51604017611aab565b9052019951821a605d811461207f5784939291602c85921461207a578293945061202e565b612037565b5098611fe2565b6120909150611a59565b90605d8251891a146120a457908290612019565b96819950611fe2565b6110f1565b60019493600093919086830190875b6120e3575b506120009495965060016120dd9101958694611ae0565b90611dbe565b808210156120ad57879186156121c5575b6120fd90611a59565b612107828261223f565b61211081611a59565b805190603a600092831a1461212e575b5050505081815b01916120c1565b61214091929399868692019088611e5b565b908093819a8395612153575b5050612120565b61219792939495969750807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a61219293030192038451608017611b15565b611aab565b905251901a607d81146121be57889291602c8492146121b9578080808061214c565b612127565b50906120c6565b6121d0919250611a59565b607d815160001a146121e4579087916120f4565b906120c6565b6001667e0000007e03ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08484015160001a011c16156110f15760058203612230575050565b600161223d9201906121ea565b565b818110156110f1576001918280809301925b612262575b508110156110f1570190565b918051600090811a602281146122f257605c8591036122e857820151901a836a05101104000000000020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde83011c166122de576075146122c7575090508082612256565b806122d560026006936121ea565b01915b80612251565b50600201916122d8565b91905001916122d8565b505091612256565b90815b600a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0825160001a011015612334576001016122fd565b8092146001166110f157565b90918092815193602d600095861a146124f1575b600a947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd095600a878451841a0110156124e4578251821a966030600180950198036124aa575b5050602e8651821a14612498575b6065865180921a60201714612455575b5050906003917fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0604051968589039503019363ffffffff8086113d3d3e81113d3d3e60781b9360581b16911617171781526020810160405291565b906003939295620100017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff261248f94841a011a01016122fa565b939091386123b8565b94816124a491016122fa565b946123a8565b919691839190825b6124c2575b50505094388061239a565b909192828282518b1a0110156124dd578301929190826124b2565b92916124b7565b631018279682526004601cfd5b5060018201612354565b80519190606081158415176125c7575063ffffffff908360581c821693806010161561252657505050565b9091938160781c8516604051918360d81c8716017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908180601f8501165b80830151818701520190811561257c57908290612564565b50505060409080835282016000602082015201604052809481113d3d3e60581b907fffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffff16176010179052565b925050565b80519190606081158415176125c7575063ffffffff908360981c82169380600816156125f757505050565b9091938160b81c8516604051918360d81c8716017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908180601f8501165b80830151818701520190811561264d57908290612635565b50505060409080835282016000602082015201604052809481113d3d3e60981b907fffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffff16176008179052565b90600091602081019060208151820101908183036126bd575b5083159110176110f157565b91819450906127089160008251811a946022845363ffffffff81113d3d3e8060d81b7f2200000000000000000000000000000000000000000000000000000000000000178252611e5b565b939093918153386126b1565b606090805190600282600716118215916020916020851694603863ffffffff938260381c8516933d923d993d993d967fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff16931561277b575b50505050505050505050505090565b8495969798999a9b9c9192939415176128a057506128855798879960409586519b8c9381850197889a805b61283057505050508286039a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0998c8b01978860051c865289528411913e1b178617905210156127fe575b808080808080808061276c565b81808492958701015b8551815187528152019301928084101561282357818391612807565b50505050388080806127f1565b898192949a9395969750528051906018908d8a1185873e89821b837fffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffff161790521c8b169788910197918c928f969594926127a6565b5050505050935050505038808080808080808080808061276c565b9a8061276c565b606090805190600282600716118215916020916020851694603863ffffffff938260381c8516933d923d993d993d967fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff16931561290d5750505050505050505050505090565b8495969798999a9b9c9192939415176128a057506128855798879960409586519b8c9381850197889a805b61298f57505050508286039a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0998c8b01978860051c865289528411913e1b178617905210156127fe57808080808080808061276c565b898192949a9395969750528051906018908d8a1185873e89821b837fffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffff161790521c8b169788910197918c928f96959492612938565b9060008092835b8151811015612afc576020818301015160f81c603081101580612af1575b612a17575b506001016129eb565b600a93919391828102928184041490151715612ac4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0908082810111612a9757820101809111612a6a57916001612a0e565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b506039811115612a09565b5050915056fea26469706673582212203957e3aba501b7ec414c6f9d256c4945fdef7743fd863df51d230665973643b564736f6c63430008180033", - "nonce": "0x3e", + "input": "0x60808060405234601557612caa908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c63c0ed97731461002757600080fd5b346110875760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126110875760043567ffffffffffffffff811161108757366023820112156110875780600401359067ffffffffffffffff8211611087573660248383010111611087576101046024926100a261111f565b506100ab61111f565b9260206100de817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116016110db565b928084528060009788940183860137830101526100f961108c565b848152604052612912565b9061010e8261298e565b604090845b61011c8561298e565b51811015610eb85761012e81836111d0565b5161014061013b826111e4565b611344565b6101a261014c866110db565b600981527f69737375654461746500000000000000000000000000000000000000000000006020918201528251908301207f6076d2bbe55ad3c4b6ee7953ef9ae2e5b181f22d3eba84d569dbda4b99713e821490565b156101d9575061011c9167ffffffffffffffff6101cb6101c661013b60019561272f565b611658565b16858701525b019050610113565b61023b6101e5866110db565b600a81527f6e657874557064617465000000000000000000000000000000000000000000006020918201528251908301207f763eaaeea7af2e6dd24f817d656a3a2f55700b655f70efd88231fddddb3c82281490565b1561026a575061011c9167ffffffffffffffff61025f6101c661013b60019561272f565b1660608701526101d1565b6102cc610276866110db565b600281527f69640000000000000000000000000000000000000000000000000000000000006020918201528251908301207fa709fd3aa96d9faf770e44a5aef2f4808a6fe3a5ddf546568f36ad3a3873f31d1490565b15610468575061013b6102de9161272f565b6103406102ea856110db565b600281527f51450000000000000000000000000000000000000000000000000000000000006020918201528251908301207f92d0cd3eba06fc871a8ce75aa3a118281eb4fae949bdb178e3efe8d9fd6445251490565b156103545750600161011c918786526101d1565b6103b6610360856110db565b600381527f51564500000000000000000000000000000000000000000000000000000000006020918201528251908301207f2fb474852ebc3fe034f7e1ae5a7b9bef7ecc6ec335a26e41ba919461c688a9771490565b156103ca5750600161011c918186526101d1565b61042c906103d7856110db565b600581527f54445f514500000000000000000000000000000000000000000000000000000060209182015281519101207f764c56994ed21d522232e8d6957d7041137c17a68c129db5c6ac324d92d33c861490565b1561044057600161011c91600286526101d1565b6004867f1423e927000000000000000000000000000000000000000000000000000000008152fd5b6104ca610474866110db565b600781527f76657273696f6e000000000000000000000000000000000000000000000000006020918201528251908301207fba1b4dd49a85c82b73f138b112d5135149203ed36c1ec80c46f8c572daa7c5ec1490565b156104f7575061011c9163ffffffff6104ec6104e760019461272f565b61150c565b1660208701526101d1565b610559610503866110db565b601781527f7463624576616c756174696f6e446174614e756d6265720000000000000000006020918201528251908301207f4e781c4bf4f96634340ceb53dcdb4730bdc24be94fdc96d345fdaa60d3d6d7b91490565b15610581575061011c9163ffffffff6105766104e760019461272f565b1660808701526101d1565b6105e361058d866110db565b600a81527f6d69736373656c656374000000000000000000000000000000000000000000006020918201528251908301207f355e097d35df62dadf6ff6c8a506f838c49019cee633e5834f0c8328a79243be1490565b15610632575061011c917fffffffff0000000000000000000000000000000000000000000000000000000061062461061f61013b60019561272f565b611597565b60e01b1660a08701526101d1565b61069461063e866110db565b600e81527f6d69736373656c6563744d61736b0000000000000000000000000000000000006020918201528251908301207f52b593a1791fdc596f47be468717d77cb65fb4ca41a49cc2251c93a07ee007e31490565b156106de575061011c917fffffffff000000000000000000000000000000000000000000000000000000006106d061061f61013b60019561272f565b60e01b1660c08701526101d1565b6107406106ea866110db565b600a81527f61747472696275746573000000000000000000000000000000000000000000006020918201528251908301207fa400e15477493b58388b48f7b160ed2fb67c4a5ddc41d82fa2a63f904d2e622b1490565b1561078a575061011c917fffffffffffffffffffffffffffffffff0000000000000000000000000000000061077c61061f61013b60019561272f565b60801b1660e08701526101d1565b6107ec610796866110db565b600e81527f617474726962757465734d61736b0000000000000000000000000000000000006020918201528251908301207f17c4cfec1552be72636a92eab6688a6f9dc4a883e1e7d7f4bbacb37d473e14b51490565b15610837575061011c917fffffffffffffffffffffffffffffffff0000000000000000000000000000000061082861061f61013b60019561272f565b60801b166101008701526101d1565b610899610843866110db565b600881527f6d727369676e65720000000000000000000000000000000000000000000000006020918201528251908301207fc6289de500ffb547b5e0b7a91f7777325c606b45d58329945f4f303ea7a9424a1490565b156108bf575061011c916108b461061f61013b60019461272f565b6101208701526101d1565b6109216108cb866110db565b600981527f69737670726f64696400000000000000000000000000000000000000000000006020918201528251908301207f930cd84e6ba04258f5ad32400f8aaf42263bb2b57105dab5bedd61b2bf8ceb751490565b15610948575061011c9161ffff61093c6104e760019461272f565b166101408701526101d1565b6109aa90610955866110db565b600981527f7463624c6576656c73000000000000000000000000000000000000000000000060209182015281519101207fd6d591efa424a0827fb062970a57c851088716066a090ed22b00fe6502c114351490565b6109bb575b50600161011c916101d1565b6109c76109d99161272f565b6109cf61108c565b8881528552612912565b6109eb6109e58261298e565b9161298e565b516109fd6109f8826114f4565b6110db565b918183527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610a2b836114f4565b01895b818110610e52575050885b828110610a505750505061016085015260016109af565b610a63610a5d82846111d0565b5161298e565b51610a71610a5d83856111d0565b8b5b828110610a8557505050600101610a39565b808d610a9f61013b610a99600195876111d0565b516111e4565b8c610b02610aac826110db565b600381527f74636200000000000000000000000000000000000000000000000000000000006020918201528351908401207f4030b14cdfc8fe1ef57f74f5c81fbdb05eb1ddd8761b287757c0be02f5788ab91490565b15610bc4575050610b16610a5d83866111d0565b90610b888d610b33610b2d61013b610a9987611194565b916110db565b600681527f69737673766e000000000000000000000000000000000000000000000000000060209182015281519101207f22402e2860cb074cd5b23d7be21f9d4928c0842771359c97717295e5cb1af67c1490565b610b96575b50505b01610a73565b610bae6104e7610ba861ffff94611194565b5161272f565b905016610bbb868a6111d0565b5152388e610b8d565b610bd0610c26916110db565b600781527f74636244617465000000000000000000000000000000000000000000000000006020918201528251908301207f5add4344b96eb4a412e6c34fcb56b6f1f9be776dbb6917001ce8245b90d0419b1490565b15610c5c57506101c661013b610c4892610c4085886111d0565b51905061272f565b6020610c54878b6111d0565b510152610b90565b610cbf9150610c6a8d6110db565b600981527f746362537461747573000000000000000000000000000000000000000000000060209182015281519101207f8ccaeed3ed0825b5048ee5eaf2994841e462373ff830e62b0e66e06e56cd20d61490565b15610b90578d8b610d38610ce2610cdc61013b610ba8878a6111d0565b926110db565b600881527f5570546f446174650000000000000000000000000000000000000000000000006020918201528251908301207f8dd11fcce5839087111530125177803569655488ae47b1f980ef0b1a711bf07c1490565b15610d55575082908c610d4b888c6111d0565b5101905052610b90565b8c610db8610d62826110db565b600781527f5265766f6b6564000000000000000000000000000000000000000000000000006020918201528351908401207f78b54e92f33559320da4a0c1454741ea1f5c5fa31eb1dd482882c6df0231e4781490565b15610dcc576002929150610d4b888c6111d0565b90610dd9610e2e926110db565b600981527f4f75744f6644617465000000000000000000000000000000000000000000000060209182015281519101207fe1dbc1592712cb224ab58df345a7bffafe7d5092dc9eff532076ee2c5e6870991490565b610e39575b50610b90565b6003908c610e47888c6111d0565b51019050528d610e33565b87516060810181811067ffffffffffffffff821117610e8b5790602092918a528c81528c838201528c8a82015282828801015201610a2e565b60248d7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b828487825191602083526101a08301908051600381101561105a579061016091602086959495015263ffffffff6020820151168686015267ffffffffffffffff8682015116606086015267ffffffffffffffff606082015116608086015263ffffffff60808201511660a08601527fffffffff0000000000000000000000000000000000000000000000000000000060a08201511660c08601527fffffffff0000000000000000000000000000000000000000000000000000000060c08201511660e08601527fffffffffffffffffffffffffffffffff0000000000000000000000000000000060e0820151166101008601527fffffffffffffffffffffffffffffffff000000000000000000000000000000006101008201511661012086015261012081015161014086015261ffff610140820151168286015201519161018080850152825180915260206101c0850193019180955b82871061101c5785850386f35b9091929381855161ffff8151168352602081015160208401520151600481101561105a5760608260209285600195015201950196019592919061100f565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b600080fd5b604051906020820182811067ffffffffffffffff8211176110ac57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff8211176110ac57604052565b60405190610180820182811067ffffffffffffffff8211176110ac5760405260606101608360008152600060208201526000604082015260008382015260006080820152600060a0820152600060c0820152600060e08201526000610100820152600061012082015260006101408201520152565b8051156111a15760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156111a15760209160051b010190565b9060609160808151166111f45750565b6111ff919250612823565b90565b63101827966000526004601cfd5b91600092600481019283111590516000915b6004830361122f57505050565b90919482861a907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd082019083667e0000007e03ff831c161561120257600192826007601060307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0961160051b9211020190039060041b010195019190611222565b90607f81111561133a5780601f538060061c601e536107ff8111156113225780600c1c601d5361ffff8111156113085780621100009160121c601c5360005163073f3f3f1663f08080801760e01b83521060021b0190565b50600390600051620f3f3f1662e080801760e81b81520190565b50600290600051611f3f1661c0801760f01b81520190565b9060019181530190565b908151601f81840101906001825160001a600286015161ff001617612222149111161561120257602160206040510193015b8181036113b6575050600082526020604051927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084820301845201604052565b6001819492945160001a910190605c81036114d5575b50908382036113e35763101827966000526004601cfd5b6001825160001a92019160016b100000000000800400000000821c166114c857846075821461145f57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffab72080000000c000000000000000a0000000d000991011a90816114515750611202565b600191815301925b90611376565b61146e91506114899293611210565b818161dbff821161d8008310171561148f575b5050926112b0565b92611459565b620ffc0093506114af9192506002615c75825160f01c1489029101611210565b92906103ff1691600a1b16016201000001903880611481565b9060019181530192611459565b602281036114e657505082386113cc565b916001919281530192611459565b67ffffffffffffffff81116110ac5760051b60200190565b9060009180516000905b60ff6001808401938501015116947f1999999999999999999999999999999999999999999999999999999999999999811190600a029060097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0808985010198011191871017171502908181101561158d5790611516565b5090501561120257565b90600082517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821160208087015160f01c17613078141660011b915b7403010a071000000b0104040208000c05090d060e0f6d03e4088843e41bac00000000000060ff6001808701968a010151161c601f161a908460fc1c82151715029360041b0101908281101561164e5790917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906115d5565b5092501561120257565b6014815103611c92576000600460609083516004811115611c8a575b8015611c82575b50808310611bd5575b5061168f9150612b68565b906005600760609083516007811115611bcd575b6005811115611bc5575b50808310611b18575b506116c19150612b68565b906008600a6060908351600a811115611b10575b6008811115611b08575b50808310611a5b575b506116f39150612b68565b90600b600d6060908351600d811115611a53575b600b811115611a4b575b5080831061199e575b506117259150612b68565b92600e601060609084516010811115611996575b600e81111561198e575b508083106118e1575b506117579150612b68565b91601190601390606092815160138111156118d9575b60118111156118d1575b508281106117ff575b5050509162023ab16101907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff50593936117ba6201518096612b68565b9860038210900393610e10603c8487069202990297610301600c60096064850495010661f4ff0201600b1c019061016d8160021c910201010392040201010201010190565b6040519281900380845292959350017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830181165b80830151818801520190811561186e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090611836565b5050600081850160200152603f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01683016040529162023ab16101907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff50593611780565b905038611777565b92508261176d565b90508160405191039182825284017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8501165b80830151818501520190811561194f57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090611917565b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f61175793600060208286010152011681016040523861174c565b925038611743565b905080611739565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8501165b808301518185015201908115611a0c57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0906119d4565b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f61172593600060208286010152011681016040523861171a565b925038611711565b905080611707565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8501165b808301518185015201908115611ac957907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090611a91565b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f6116f39360006020828601015201168101604052386116e8565b9250386116df565b9050806116d5565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8501165b808301518185015201908115611b8657907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090611b4e565b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f6116c19360006020828601015201168101604052386116b6565b9250386116ad565b9050806116a3565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8501165b808301518185015201908115611c4357907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090611c0b565b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f61168f936000602082860101520116810160405238611684565b92503861167b565b905080611674565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f696e76616c69642069736f20737472696e67206c656e677468000000000000006044820152fd5b5b6001640100002600825160001a1c16156111ff57600101611cf1565b9063ffffffff81113d3d3e60181b907fffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffff161790565b9063ffffffff81113d3d3e60981b907fffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffff161790565b9063ffffffff81113d3d3e60381b907fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff161790565b9063ffffffff81113d3d3e60b81b907fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff161790565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600495949796978560405199039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600595949796978560405199039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600695949796978560405199039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600195949796978560405199039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600295949796978560405199039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b169116171717825260208201604052565b939261212061211a60009493600051611d0d565b92611cf0565b92818410156122385750825160001a6022811490605b811460016703ff200000000000607b8414931c16926122195761220b576121f2576121db576004830181811115612193575b5060058301908111611202576466616c7365835160d81c03611202576111ff9261211a928296611e82565b8390845160e01c90637472756582146121c75750636e756c6c036121685761211a9295915060046111ff9401958692611f23565b6111ff955080935061211a94915096611e82565b90916121ea926111ff95612579565b929092611cf0565b5091906121ff9394612316565b9091906111ff90611cf0565b505091906121ff939461223f565b505050938261223061211a93966111ff9592612491565b958692611de1565b9450505090565b939060009081600185015b8681101561231157869082156122db575b6122659289612106565b80828061227a575b5050506001865b0161224a565b948561228e82600194959851604017611d42565b905201935160001a605d81146122b457602c146122ac57808061226d565b600190612274565b506122d29196506122d8959350600190979294975b01958694611d77565b90611fc4565b91565b6122e59150611cf0565b90605d825160001a146122fa5790869061225b565b95506122d894925060016122d291979294976122c9565b611202565b939091600092600182015b85811015612311578415612412575b61233990611cf0565b6123438682612491565b908661234e83611cf0565b603a815160001a14612369575b509050600191505b01612321565b96600161237a93949801908a612106565b9080928197839461238f575b5088915061235b565b6123c7827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08d6123cc95030192038451608017611dac565b611d42565b90525160001a607d81146123f257602c146123ea5780808080612386565b600190612363565b506122d8949550600161240c919792949701958694611d77565b90612065565b61241b90611cf0565b607d815160001a03612330576122d8949550600161240c91979294976122c9565b6001667e0000007e03ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08484015160001a011c16156112025760058203612482575050565b600161248f92019061243c565b565b81811015611202576001015b805160001a6022811461252c57605c0361252457600181015160001a60016a05101104000000000020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde83011c1661251b576075146125075750805b8110156112025760010190565b80612515600260069361243c565b0161249d565b5060020161249d565b60010161249d565b50906124fa565b90815b600a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0825160001a01101561256d57600101612536565b80921460011661120257565b919092508092602d825160001a14612724575b600a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0855160001a0110156112025760306001855160001a950194036126e1575b602e845160001a146126ce575b835160658160001a6020171461268b575b50906003917fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0604051968589039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b16911617171781526020810160405291565b60016003939295620100017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff26126c694841a011a0101612533565b9390916125eb565b9260016126db9101612533565b926125da565b9190925b600a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0825160001a01101561271c576001016126e5565b9290916125cd565b60018201935061258c565b805191906060811584151761281e57508260581c63ffffffff16928060101615612757575050565b8060781c63ffffffff16604051948260d81c63ffffffff16017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8401165b8083015181890152019081156127d057907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090612798565b5050604090808652850160006020820152016040528363ffffffff81113d3d3e60581b907fffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffff16176010179052565b925050565b805191906060811584151761281e57508260981c63ffffffff1692806008161561284b575050565b8060b81c63ffffffff16604051948260d81c63ffffffff16017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8401165b8083015181890152019081156128c457907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09061288c565b5050604090808652850160006020820152016040528363ffffffff81113d3d3e60981b907fffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffff16176008179052565b9060009160208101906020815182010190818303612937575b50831591101761120257565b91819450906129829160008251811a946022845363ffffffff81113d3d3e8060d81b7f2200000000000000000000000000000000000000000000000000000000000000178252612106565b9390939181533861292b565b606090805190600282600716119060208316928060381c63ffffffff169180158215179363ffffffff8211923d3d908460181b983d983d947fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff1695156129fd575b505050505050505050505090565b9a909192939495969798999a612b615750612b48576040519860208a019796889695949392885b612af857505050506040945087840396877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001948560051c8a52865263ffffffff8911913e8660381b1760201790521015612a88575b8080808080808080806129ef565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080602092938501015b83518151855281520191019080821015612aef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602091612ab2565b50503880612a7a565b88602099899596979899528051908383883e84827fffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffff1617905260181c63ffffffff16988994019796959493612a24565b50505050505091505038808080808080808080806129ef565b99806129ef565b906000805b835182101561281e5760006020838601015160f81c603081101580612c69575b612b9e575b50509060010190612b6d565b600a830292808404600a1490151715612c3c57807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0810111612c3c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd090830101809211612c0f5750600138612b92565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b506039811115612b8d56fea2646970667358221220c01d34c2920ae9252762a10e5b01bca1b6e0f7d31a0573be4c7f814ac96f9d2d64736f6c634300081b0033", + "nonce": "0x0", "chainId": "0x1555e3" }, "additionalContracts": [], @@ -22,31 +22,31 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x25c8a8", + "cumulativeGasUsed": "0x26ff40", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x3cf97f782ce8d299e540fe7273b8e54aa9a9fd535f679986bdfc0d3616453c6f", + "transactionHash": "0x5d5fa00f4860a2418b8b4fc21b5c66f6ad4769280331f280a61dab898548f3d5", "transactionIndex": "0x1", - "blockHash": "0xd07cd1851c30047c64be12337230970e4fcf148c2cdcec2ef28cdfc041f360b0", - "blockNumber": "0x749a9", - "gasUsed": "0x251d42", + "blockHash": "0x4c282b675e092beed23dbb7663f6ec15fb823b2f2db2bcebc636ef3cfdc7a24f", + "blockNumber": "0x63a08d", + "gasUsed": "0x2653fe", "effectiveGasPrice": "0xfd", - "from": "0x3d089c2f2cb86d4efde153c81cabd4579784430b", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", "to": null, - "contractAddress": "0xfd4a34b578b352fe1896cdafaeb0f45f993352bf", + "contractAddress": "0xae27d762eed6958bc34b358bd7c78c7211fe77f8", "l1BaseFeeScalar": "0x558", - "l1BlobBaseFee": "0x19c5", + "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xc5fc5", - "l1Fee": "0x39a04fa3166", - "l1GasPrice": "0x78d515a3b", - "l1GasUsed": "0x15c9d" + "l1Fee": "0x46b854733", + "l1GasPrice": "0x9a16d4a", + "l1GasUsed": "0x14f7e" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1719821110, + "timestamp": 1731924222, "chain": 1398243, - "commit": "a19567c" + "commit": "1cc539f" } \ No newline at end of file diff --git a/broadcast/DeployHelpers.s.sol/1398243/deployFmspcTcbHelper-latest.json b/broadcast/DeployHelpers.s.sol/1398243/deployFmspcTcbHelper-latest.json index 0166179..0b5d32f 100644 --- a/broadcast/DeployHelpers.s.sol/1398243/deployFmspcTcbHelper-latest.json +++ b/broadcast/DeployHelpers.s.sol/1398243/deployFmspcTcbHelper-latest.json @@ -1,18 +1,18 @@ { "transactions": [ { - "hash": "0x7a2a2015ff331a3fd59df1f3d87339a03b11626e5d47a38651bc4e61a2c0d7ea", + "hash": "0xd05eb25f7883b0d5caf35b460ffee993d710b4129007627db23c097eb5eb3b7a", "transactionType": "CREATE", "contractName": "FmspcTcbHelper", - "contractAddress": "0xc2a662e08a35513596e22d0ac236ce72e59125ee", + "contractAddress": "0x71056b540b4e60d0e8efb55fad487c486b09fff5", "function": null, "arguments": null, "transaction": { - "from": "0x3d089c2f2cb86d4efde153c81cabd4579784430b", - "gas": "0x45eb03", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", + "gas": "0x4c951f", "value": "0x0", - "input": "0x6080806040523461001657613f12908161001c8239f35b600080fdfe610240604052600436101561001357600080fd5b60003560e01c80630985653c146111e85780630f1dbf4514610ae757632793d5d21461003e57600080fd5b34610ae25761004c3661193c565b61006a61006561005a611c74565b936060933691611adb565b611c94565b9061007482613466565b6000906000806000926000805b61008a89613466565b51821015610ad4575061009d8183611b7c565b516100af6100aa82611d3f565b611e95565b6100cf6100ba611b90565b82906020815191012090602081519101201490565b610a8d575b6100df6100ba611c02565b610a3d575b7f7464784d6f64756c650000000000000000000000000000000000000000000000602060405161011381611a7e565b6009815201527f6f1c9533f85324bc119f3689d641a35996bdbfce949a5b36ae5ef040c09e2c0981516020830120146108fe575b7f6d3b4de4f5b6531723dfb0e5d8257d4dbfe34b65370323640e41f5cf63ee9a4f907f7464784d6f64756c654964656e74697469657300000000000000000000000000602060405161019881611a7e565b60138152015260208151910120146103a4575b5085908161039c575b81610394575b8161038c575b816101ce5760010190610081565b5095965050505050505b1561036257906040519182916040835260a061020082516060604087015260a08601906119e8565b602090604082850151947fffffffffffffffff000000000000000000000000000000000000000000000000809616606089015201519284608094166080880152868203838801528551938483528383019184808760051b8601019801966000945b87861061026e578a8a038bf35b91939597995091939597807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838a93030187528a51866102e06102b88351898652898601906119e8565b87868501511686860152876040850151166040860152606084015185820360608701526119e8565b91015191878183039101528280835192838152019201906000905b8082106103205750505090806001929b019601960193918a9998969391979597610261565b91936060600192946103546040885160ff815116845267ffffffffffffffff868201511686850152015160408301906119db565b01940192018a9392916102fb565b60046040517f5aeb6bce000000000000000000000000000000000000000000000000000000008152fd5b8591506101c0565b8491506101ba565b8391506101b4565b9094506103b2919650613466565b80516103ce6103c0826120f7565b60405160e05260e051611a9a565b8060e051527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06103fd826120f7565b0160005b8181106108c3575050906000915b8083106104275750505060e0519484600194906101ab565b90969761044261043c848a9c9996959c611b7c565b516135f9565b9860006080525b61045661043c8c8b611b7c565b5160805110156108b1576104f061047c6100aa6104768d60805190611b7c565b51611d3f565b8c8c61049e610489611c02565b84906020815191012090602081519101201490565b610889575b6104ae6104896127ee565b610856575b6104be61048961277c565b610810575b6104ce6104896127b5565b6107b8575b50506104dd611bc9565b6020815191012090602081519101201490565b610503575b600160805101608052610449565b6105186105126080518c611b7c565b51613736565b60a05260a05151610528816120f7565b6105356040519182611a9a565b8181528c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610563846120f7565b0160005b81811061078c57505061057e60809160e051611b7c565b5101526000610100525b8b81610100511061059a5750506104f5565b979491909a9895926105b76105126101009996995160a051611b7c565b60c05260005b60c0515181101561076f576105da6100aa6104768360c051611b7c565b6105e56100ba61210f565b6106a9575b906106096001926105fc6100ba612148565b610664575b6104dd612181565b610614575b016105bd565b61065f8b604061065861063d6106386100aa6106328860c051611b7c565b516132c9565b613873565b926080610650610100519260e051611b7c565b510151611b7c565b51016121ba565b61060e565b8c60206106a167ffffffffffffffff61068d6106886100aa6106328a60c051611b7c565b61227a565b16926080610650610100519260e051611b7c565b510152610601565b5098506106bb6105128a60c051611b7c565b986106cb6100aa6104768c611b40565b907f69737673766e000000000000000000000000000000000000000000000000000060206040516106fb81611a7e565b600681520152815160208301207f22402e2860cb074cd5b23d7be21f9d4928c0842771359c97717295e5cb1af67c03610362576106098f9b928c61076460ff61075061074b610632600199611b40565b61206a565b16916080610650610100519260e051611b7c565b5152919250506105ea565b509295989a90919497509592956001610100510161010052610588565b60209060405161079b81611a46565b600081526000838201526000604082015282828701015201610567565b6108067fffffffffffffffff0000000000000000000000000000000000000000000000006107f96107f46100aa61063260409660805190611b7c565b6121c6565b60c01b169260e051611b7c565b5101528c8c6104d3565b61084c7fffffffffffffffff0000000000000000000000000000000000000000000000006107f96107f46100aa61063260209660805190611b7c565b5101528c8c6104c3565b61087f6108766108716100aa61063260609560805190611b7c565b613d37565b9260e051611b7c565b5101528c8c6104b3565b61089f6100aa6106326108a89360805190611b7c565b9160e051611b7c565b51528c8c6104a3565b9792939699600191995001919061040f565b6020906040516108d281611a62565b606081526000838201526000604082015260608082015260606080820152828260e05101015201610401565b919592969398979450985061091289613466565b9561091b611c74565b9760005b8851811015610a0757808961097861094f6100aa610632856109496100aa61047660019a89611b7c565b95611b7c565b9161095b6100ba61277c565b6109ce575b61096b6100ba6127b5565b610995575b6104dd6127ee565b610984575b500161091f565b61098d90613d37565b8b523861097d565b8d60407fffffffffffffffff0000000000000000000000000000000000000000000000006109c2866121c6565b60c01b16910152610970565b8d60207fffffffffffffffff0000000000000000000000000000000000000000000000006109fb866121c6565b60c01b16910152610960565b50989396509194909396987f6d3b4de4f5b6531723dfb0e5d8257d4dbfe34b65370323640e41f5cf63ee9a4f6001959050610147565b9350610a56610a4e6100aa836132c9565b6104dd611c3b565b15610a63576001936100e4565b60046040517f31ab78b5000000000000000000000000000000000000000000000000000000008152fd5b96506003610a9d61074b836132c9565b10610aaa576001966100d4565b60046040517f8dcbb595000000000000000000000000000000000000000000000000000000008152fd5b9697505050505050506101d8565b600080fd5b34610ae257610af53661193c565b6040519161010083019083821067ffffffffffffffff8311176111b957610b5992610065926040526000855260006020860152600060408601526000606086015260006080860152600060a0860152600060c0860152600060e08601523691611adb565b610b6281613466565b6000908190819081908190819081908180805b610b7e8c613466565b518210156111a857610b908285611b7c565b51908d610ba8610ba26100aa85611d3f565b936132c9565b927f74636254797065000000000000000000000000000000000000000000000000006020604051610bd881611a7e565b600781520152805160208201207ff1ef84607333b53a2004a6165e8ab88f55e83518116e21fd0b464b25722b2c3f03610db6575050509060ff610c1d8b95949361206a565b168d528c6001945b610c38575b509192909160010190610b75565b91508380610daf575b80610da8575b80610da1575b80610d9a575b80610d93575b600363ffffffff604083950151161015610d7c575b5081610c7a578c610c2a565b5099505050505050505050505b156103625760405160ff82511681526020820151916002831015610d4d5760e07fffff00000000000000000000000000000000000000000000000000000000000091610100946020850152604081015163ffffffff809116604086015267ffffffffffffffff606083015116606086015267ffffffffffffffff608083015116608086015260a08201511660a08501527fffffffffffff000000000000000000000000000000000000000000000000000060c08201511660c085015201511660e0820152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90915080610d8c575b908d610c6e565b5089610d85565b5088610c59565b5087610c53565b5086610c4d565b5085610c47565b5084610c41565b610dc76100ba9e929493989e611c02565b15610e7557505090610dde8b9c9695949392611e95565b7f53475800000000000000000000000000000000000000000000000000000000006020604051610e0d81611a7e565b600381520152805160208201207f8ec2409669ebaea0d83544d244ace12e63a771ee426935bcc157d252eb5f304603610e525750602060009101525b8c60019b610c25565b9050610e62919a506104dd611c3b565b15610362578998600160208e0152610e49565b7f666d7370630000000000000000000000000000000000000000000000000000006020929e92604051610ea781611a7e565b600581520152805160208201207f32d406b8d9e731fc9123600c61c66a13cbea488c34cc3d265954e87695b4121003610f215750509060c07fffffffffffff0000000000000000000000000000000000000000000000000000610f116107f48e9998979695611e95565b60d01b169101528c600195610c25565b610f346100ba9d9298979695949d611b90565b15610f58575050610f4963ffffffff9161206a565b1660408b01526001998a610c25565b97819c9291987f69737375654461746500000000000000000000000000000000000000000000006020604051610f8d81611a7e565b600981520152805160208201207f6076d2bbe55ad3c4b6ee7953ef9ae2e5b181f22d3eba84d569dbda4b99713e8203610fe657505067ffffffffffffffff610fd9610688606093611e95565b169101528c600196610c25565b7f6e65787455706461746500000000000000000000000000000000000000000000602060409c939b9c5161101981611a7e565b600a81520152805160208201207f763eaaeea7af2e6dd24f817d656a3a2f55700b655f70efd88231fddddb3c82280361107257505067ffffffffffffffff611065610688608093611e95565b169101528c600197610c25565b7f7063654964000000000000000000000000000000000000000000000000000000602060409d939c9d516110a581611a7e565b600581520152805160208201207f1f5653bc1bc6e041fc665b046bb7155c6612899340379c5caa4d030682426aea036111195750507fffff0000000000000000000000000000000000000000000000000000000000006111096107f460e093611e95565b60f01b169101528c600198610c25565b7f4e781c4bf4f96634340ceb53dcdb4730bdc24be94fdc96d345fdaa60d3d6d7b9907f7463624576616c756174696f6e446174614e756d626572000000000000000000602060409e95949e5161116e81611a7e565b6017815201526020815191012014611187575b50610c25565b60a0919b5061119a63ffffffff9161206a565b169101528c6001998f611181565b505098505050505050505050610c87565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b34610ae2576100656112086111fc3661193c565b92906000933691611adb565b61121181613466565b60008060609260005b61122386613466565b51811015611931576112358183611b7c565b516112426100aa82611d3f565b61124d6100ba611b90565b611918575b61125e906104dd611bc9565b611900575b5083806118f9575b6112775760010161121a565b5050909192505b816118f1575b5015610362578051611295816120f7565b916112a36040519384611a9a565b8183527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06112d0836120f7565b0160005b8181106118b7575050906000915b8183106113c45750505060405190604082019282526020604081840152815180945260608301938160608260051b8601019301916000955b8287106113275785850386f35b909192938280827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089600195030185526113b488519161139161137f60a061ffff8651168452868601519080888601528401906119a4565b604085015183820360408501526119a4565b9267ffffffffffffffff60608201511660608301526080809101519101906119db565b960192019601959291909261131a565b6113da6113d48483979597611b7c565b51613466565b936000905b6113ec6113d48885611b7c565b518210156118a7576114046100aa6104768489611b7c565b61140f6100ba61210f565b15611824575061142d611428610065610632858a611b7c565b613466565b93600286036114fd57600093611441613b56565b966000956000905b88518210156114b957889061148061147761074b610632866114716100aa610476838a611b7c565b96611b7c565b926104dd613b84565b15611496575061ffff60019116915b0190611449565b91886114b360ff6114aa6001959c93613bbd565b9b16918d611b7c565b5261148f565b9497505094601090979197949294036103625760019260206114db8b89611b7c565b51019061ffff6114eb8c8a611b7c565b5191169052525b0190929391936113df565b9396939591949092906003810361036257600096611519613b56565b61020052611525613b56565b9760006101a0525b89516101a05110156117dc5761154c6100aa6104766101a0518d611b7c565b6101c05261157361155b613b84565b6101c051906020815191012090602081519101201490565b156115a3575061ffff61158f61074b6106326101a0518d611b7c565b16905b60016101a051016101a0529061152d565b9695949391906115bc6113d46101a09b9a9b518b611b7c565b610180526000610160526000610220525b6115dd6113d46101a0518b611b7c565b5161022051101561179c576115fb6113d46102205161018051611b7c565b6101e05260005b6116156113d46102205161018051611b7c565b5181101561178b57806116336100aa6104766001946101e051611b7c565b7f4294eaea1f2439036f92859f5d2aee946a31a48b4d3ebceca5872241d2d718096040519161166183611a7e565b600383527f73766e00000000000000000000000000000000000000000000000000000000006020809401528281519101201461169f575b5001611602565b807f746478746362636f6d706f6e656e7473000000000000000000000000000000007fd039dfd6fdf9579033b5870aaca39cde10fbba50b5b2d55d2fa2454f62ea3454926040516116ef81611a7e565b6010815201526101c0518051910120036117475760ff61171861074b610632846101e051611b7c565b16610160516101405261172d61016051613bbd565b6101605261173f8d6101405190611b7c565b525b8c611698565b60ff61175c61074b610632846101e051611b7c565b16610160516101205261177161016051613bbd565b610160526117856101205161020051611b7c565b52611741565b5060016102205101610220526115cd565b9897989690919394959660106101605103156115925760046040517f5aeb6bce000000000000000000000000000000000000000000000000000000008152fd5b90939760019397929596995060206117f48b89611b7c565b51019160406118038c8a611b7c565b51019061ffff6118138d8b611b7c565b5191169052526102005190526114f2565b9160019194926118386100ba979597612148565b1561186f575067ffffffffffffffff61185a6106886100aa610632858c611b7c565b1660606118678a88611b7c565b5101526114f2565b61187b906104dd612181565b156114f2576118a26118966106386100aa610632858c611b7c565b60806106588b89611b7c565b6114f2565b94505090919360010191906112e2565b6020906040516118c681611a62565b60008152826060818301526060604083015260006060830152600060808301528288010152016112d4565b905083611284565b508261126b565b90925061190e919450613466565b9260019187611263565b9450965061192861074b886132c9565b96600194611252565b50509091925061127e565b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc830112610ae25760043567ffffffffffffffff92838211610ae25780602383011215610ae2578160040135938411610ae25760248483010111610ae2576024019190565b90815180825260208080930193019160005b8281106119c4575050505090565b835160ff16855293810193928101926001016119b6565b906008821015610d4d5752565b919082519283825260005b848110611a325750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b6020818301810151848301820152016119f3565b6060810190811067ffffffffffffffff8211176111b957604052565b60a0810190811067ffffffffffffffff8211176111b957604052565b6040810190811067ffffffffffffffff8211176111b957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176111b957604052565b92919267ffffffffffffffff82116111b95760405191611b2360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184611a9a565b829481845281830111610ae2578281602093846000960137010152565b805115611b4d5760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051821015611b4d5760209160051b010190565b60405190611b9d82611a7e565b600782527f76657273696f6e000000000000000000000000000000000000000000000000006020830152565b60405190611bd682611a7e565b600982527f7463624c6576656c7300000000000000000000000000000000000000000000006020830152565b60405190611c0f82611a7e565b600282527f69640000000000000000000000000000000000000000000000000000000000006020830152565b60405190611c4882611a7e565b600382527f54445800000000000000000000000000000000000000000000000000000000006020830152565b60405190611c8182611a46565b6000604083606081528260208201520152565b6040516020810167ffffffffffffffff8282109111176111b957600090818152604052809160208101906020815182010190818303611ce9575b508315911017611cdc575090565b631018279690526004601cfd5b9181945090611d3391848251811a946022845363ffffffff81113d3d3e8060d81b7f2200000000000000000000000000000000000000000000000000000000000000178252612c29565b93909391815338611cce565b906060916080815116611d4f5750565b611d5a91925061339a565b90565b63101827966000526004601cfd5b9160009260049060048101938411159051600080935b808503611d8f575050505050565b909192939683881a907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09182810187667e0000007e03ff821c1615611df557908160076010603060019796951160051b92110201900390841b0101970193929190611d81565b8463101827968752601cfd5b90607f811115611e8b5780601f538060061c601e536107ff811115611e735780600c1c601d5361ffff811115611e595780621100009160121c601c5360005163073f3f3f1663f08080801760e01b83521060021b0190565b50600390600051620f3f3f1662e080801760e81b81520190565b50600290600051611f3f1661c0801760f01b81520190565b9060019181530190565b908151601f8184010190815191600092600290841a600287015161ff001617612222146001809411161561205d5760216020604094939451019601905b838203611f12575050505082526020604051927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084820301845201604052565b90919295838396959651871a930192605c8103612038575b50868303611f40575b631018279686526004601cfd5b838351871a930192846b100000000000800400000000821c16612029578760758214611fbd57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffab72080000000c000000000000000a0000000d000991011a80611faa5750611f33565b908491819796975301955b929190611ed2565b611fd09150611feb929488979850611d6b565b818161dbff821161d80083101715611ff1575b505093611e01565b95611fb5565b620ffc00935061201091925085615c75825160f01c148c029101611d6b565b92906103ff1691600a1b16016201000001903880611fe3565b90849181979697530195611fb5565b6022819492940361204d575050859138611f2a565b9284919381979697530195611fb5565b631018279684526004601cfd5b9060009180516000905b60ff826001809101938501015116947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09060097f1999999999999999999999999999999999999999999999999999999999999999821191600a029280898501019801119187101717150290818110156120ed5790612074565b50905015611d5d57565b67ffffffffffffffff81116111b95760051b60200190565b6040519061211c82611a7e565b600382527f74636200000000000000000000000000000000000000000000000000000000006020830152565b6040519061215582611a7e565b600782527f74636244617465000000000000000000000000000000000000000000000000006020830152565b6040519061218e82611a7e565b600982527f74636253746174757300000000000000000000000000000000000000000000006020830152565b6008821015610d4d5752565b90600091805190600190816001841160208084015160f01c17613078141660011b925b6121f8575b50505015611d5d57565b909194927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff907403010a071000000b0104040208000c05090d060e0f6d03e4088843e41bac00000000000060ff85808b019a88010151161c601f161a908560fc1c82151715029460041b01019483811015612275579190806121e9565b6121ee565b601481510361271e576000600460609083516004811115612716575b801561270e575b508083106126a0575b506122b19150613c19565b906005600760609083516007811115612698575b6005811115612690575b50808310612622575b506122e39150613c19565b6008600a6060908451600a81111561261a575b6008811115612612575b508083106125a4575b506123149150613c19565b90600b600d6060908551600d81111561259c575b600b811115612594575b50808310612526575b506123469150613c19565b92600e60106060908351601081111561251e575b600e811115612516575b508083106124a8575b506123789150613c19565b906011906013606092825160138111156124a0575b6011811115612498575b50818110612420575b5050509162023ab17ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff50593926123d76201518095613c19565b976003841090039261019091610e10603c8487069202990297610301600c60096064850495010661f4ff0201600b1c019061016d8160021c910201010392040201010201010190565b604051918190038083529591949193507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0920182601f870181165b8083015181880152019081156124735790839061245b565b5050600060208587010152603f909401168201604052919062023ab1826123d76123a0565b905038612397565b91508161238d565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908180601f8601165b8083015181860152019081156124f8579082906124e0565b5050603f61237893600060208286010152011681016040523861236d565b925038612364565b90508061235a565b90508160405191039182825285017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908180601f8601165b8083015181860152019081156125765790829061255e565b5050603f61234693600060208286010152011681016040523861233b565b925038612332565b905080612328565b90508160405191039182825284017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908180601f8601165b8083015181860152019081156125f4579082906125dc565b5050603f612314936000602082860101520116810160405238612309565b925038612300565b9050806122f6565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908180601f8601165b8083015181860152019081156126725790829061265a565b5050603f6122e39360006020828601015201168101604052386122d8565b9250386122cf565b9050806122c5565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908180601f8601165b8083015181860152019081156126f0579082906126d8565b5050603f6122b19360006020828601015201168101604052386122a6565b92503861229d565b905080612296565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f696e76616c69642069736f20737472696e67206c656e677468000000000000006044820152fd5b6040519061278982611a7e565b600a82527f61747472696275746573000000000000000000000000000000000000000000006020830152565b604051906127c282611a7e565b600e82527f617474726962757465734d61736b0000000000000000000000000000000000006020830152565b604051906127fb82611a7e565b600882527f6d727369676e65720000000000000000000000000000000000000000000000006020830152565b5b6001640100002600825160001a1c1615611d5a57600101612828565b9063ffffffff81113d3d3e60181b907fffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffff161790565b9063ffffffff81113d3d3e60981b907fffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffff161790565b9063ffffffff81113d3d3e60381b907fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff161790565b9063ffffffff81113d3d3e60b81b907fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff161790565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600495949796978560405199039503019363ffffffff8086113d3d3e81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600595949796978560405199039503019363ffffffff8086113d3d3e81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600695949796978560405199039503019363ffffffff8086113d3d3e81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600195949796978560405199039503019363ffffffff8086113d3d3e81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600295949796978560405199039503019363ffffffff8086113d3d3e81113d3d3e60781b9360581b169116171717825260208201604052565b9091612c44612c3e6000969594600051612844565b91612827565b9280841015612d9157835160001a60228114605b8214607b83149160016703ff20000000000081951c1693612c84575b50505050505050611d5a90612827565b9091929394959850612d7257612d6457612d4657612d2a5760048084019082821115612ce4575b505060058301908111611d5d576466616c7365835160d81c03611d5d57611d5a92612cd79282966129b5565b9290388080808080612c74565b8491855160e01c9063747275658214612d165750636e756c6c03612cab57612cd793969250611d5a9401958692612a52565b93505050611d5a9350612cd79282966129b5565b5090612d3991611d5a9461310e565b9092388080808080612c74565b509190612d539394612e80565b909190611d5a388080808080612c74565b50509190612d539394612d97565b5050509382612d89612cd79396611d5a959261300d565b958692612918565b50505090565b916000929493946000806001809860018601995b612dd1575b50505050612dc86001612dce959697019586946128ae565b90612aef565b91565b919690929882811015612e7b5782908215612e54575b612df19286612c29565b909690808880612e10575b50505090829182825b019993919092612dab565b9a8b612e23828894959e51604017612879565b9052019951821a605d8114612e4d5784939291602c859214612e485782939450612dfc565b612e05565b5098612db0565b612e5e9150612827565b90605d8251891a14612e7257908290612de7565b96819950612db0565b611d5d565b60019493600093919086830190875b612eb1575b50612dce949596506001612eab91019586946128ae565b90612b8c565b80821015612e7b5787918615612f93575b612ecb90612827565b612ed5828261300d565b612ede81612827565b805190603a600092831a14612efc575b5050505081815b0191612e8f565b612f0e91929399868692019088612c29565b908093819a8395612f21575b5050612eee565b612f6592939495969750807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a612f60930301920384516080176128e3565b612879565b905251901a607d8114612f8c57889291602c849214612f875780808080612f1a565b612ef5565b5090612e94565b612f9e919250612827565b607d815160001a14612fb257908791612ec2565b90612e94565b6001667e0000007e03ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08484015160001a011c1615611d5d5760058203612ffe575050565b600161300b920190612fb8565b565b81811015611d5d576001918280809301925b613030575b50811015611d5d570190565b918051600090811a602281146130c057605c8591036130b657820151901a836a05101104000000000020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde83011c166130ac57607514613095575090508082613024565b806130a36002600693612fb8565b01915b8061301f565b50600201916130a6565b91905001916130a6565b505091613024565b90815b600a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0825160001a011015613102576001016130cb565b809214600116611d5d57565b90918092815193602d600095861a146132bf575b600a947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd095600a878451841a0110156132b2578251821a96603060018095019803613278575b5050602e8651821a14613266575b6065865180921a60201714613223575b5050906003917fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0604051968589039503019363ffffffff8086113d3d3e81113d3d3e60781b9360581b16911617171781526020810160405291565b906003939295620100017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff261325d94841a011a01016130c8565b93909138613186565b948161327291016130c8565b94613176565b919691839190825b613290575b505050943880613168565b909192828282518b1a0110156132ab57830192919082613280565b9291613285565b631018279682526004601cfd5b5060018201613122565b8051919060608115841517613395575063ffffffff908360581c82169380601016156132f457505050565b9091938160781c8516604051918360d81c8716017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908180601f8501165b80830151818701520190811561334a57908290613332565b50505060409080835282016000602082015201604052809481113d3d3e60581b907fffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffff16176010179052565b925050565b8051919060608115841517613395575063ffffffff908360981c82169380600816156133c557505050565b9091938160b81c8516604051918360d81c8716017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908180601f8501165b80830151818701520190811561341b57908290613403565b50505060409080835282016000602082015201604052809481113d3d3e60981b907fffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffff16176008179052565b606090805190600282600716118215916020916020851694603863ffffffff938260381c8516933d923d993d993d967fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff1693156134cd575b50505050505050505050505090565b8495969798999a9b9c9192939415176135f257506135d75798879960409586519b8c9381850197889a805b61358257505050508286039a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0998c8b01978860051c865289528411913e1b17861790521015613550575b80808080808080806134be565b81808492958701015b8551815187528152019301928084101561357557818391613559565b5050505038808080613543565b898192949a9395969750528051906018908d8a1185873e89821b837fffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffff161790521c8b169788910197918c928f969594926134f8565b505050505093505050503880808080808080808080806134be565b9a806134be565b606090805190600282600716118215916020916020851694603863ffffffff938260381c8516933d923d993d993d967fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff16931561365f5750505050505050505050505090565b8495969798999a9b9c9192939415176135f257506135d75798879960409586519b8c9381850197889a805b6136e157505050508286039a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0998c8b01978860051c865289528411913e1b178617905210156135505780808080808080806134be565b898192949a9395969750528051906018908d8a1185873e89821b837fffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffff161790521c8b169788910197918c928f9695949261368a565b606090805190600282600716118215916020916020851694603863ffffffff938260381c8516933d923d993d993d967fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff16931561379c5750505050505050505050505090565b8495969798999a9b9c9192939415176135f257506135d75798879960409586519b8c9381850197889a805b61381e57505050508286039a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0998c8b01978860051c865289528411913e1b178617905210156135505780808080808080806134be565b898192949a9395969750528051906018908d8a1185873e89821b837fffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffff161790521c8b169788910197918c928f969594926137c7565b604080519161388183611a7e565b600883527f5570546f446174650000000000000000000000000000000000000000000000006020809401528051917f8dd11fcce5839087111530125177803569655488ae47b1f980ef0b1a711bf07c848301938420146000146138e75750505050600090565b7f4f75744f6644617465000000000000000000000000000000000000000000000084825161391481611a7e565b600981520152815183207fe1dbc1592712cb224ab58df345a7bffafe7d5092dc9eff532076ee2c5e6870990361394d5750505050600490565b7f4f75744f6644617465436f6e66696775726174696f6e4e65656465640000000084825161397a81611a7e565b601c81520152815183207f605a88f0014fcefe2d398f17b974556e2ae7481bfdc313f7e0af48c270400c49036139b35750505050600590565b7f436f6e66696775726174696f6e4e6565646564000000000000000000000000008482516139e081611a7e565b601381520152815183207f820e8e2a851961706b111f73b809da9ccf7c4d4181cd135f0696ca2daa50594203613a195750505050600390565b60218151613a2681611a46565b8181527f640000000000000000000000000000000000000000000000000000000000000083878301927f436f6e66696775726174696f6e416e64535748617264656e696e674e6565646584520152208251842014600014613a8a5750505050600290565b7f535748617264656e696e674e6565646564000000000000000000000000000000848251613ab781611a7e565b601181520152815183207f7ad9f5b3c5180451fdebfb145dcb7bcd2dc9f95342d3659e0dcc8d07b31182a103613af05750505050600190565b7f78b54e92f33559320da4a0c1454741ea1f5c5fa31eb1dd482882c6df0231e478937f5265766f6b6564000000000000000000000000000000000000000000000000009151613b3e81611a7e565b60078152015251902003613b5157600690565b600790565b60405190610220820182811067ffffffffffffffff8211176111b95760405260108252610200366020840137565b60405190613b9182611a7e565b600682527f70636573766e00000000000000000000000000000000000000000000000000006020830152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114613bea5760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9060008092835b8151811015613d31576020818301015160f81c603081101580613d26575b613c4c575b50600101613c20565b600a93919391828102928184041490151715613cf9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0908082810111613ccc57820101809111613c9f57916001613c43565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b506039811115613c3e565b50509150565b6000601060609183516010811115613ed4575b8015613ecc575b50818110613e5d575b505060109160309060609381516030811115613e55575b6010811115613e4d575b50828110613dd9575b505050613d93613d99916121c6565b916121c6565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000006040519260801b166020830152603082015260308152611d5a81611a46565b604051928190038084529294507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093910183601f840181165b808301518188015201908115613e2a57908490613e12565b5050613d9992603f613d9393600060208289010152011684016040529138613d84565b905038613d7b565b925082613d71565b809192506040519203908183528301907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080928180601f8501165b808301518188015201908115613eb057908290613e98565b505060008483016020015250603f011681016040523880613d5a565b905038613d51565b915081613d4a56fea2646970667358221220efc72806703d6b6d1130ffa4e3c70acf2a02dc420e2c78cab848cbed9133caf664736f6c63430008180033", - "nonce": "0xfa", + "input": "0x6080806040523460155761452f908161001b8239f35b600080fdfe610460604052600436101561001357600080fd5b60003560e01c80630985653c146115855780630f1dbf4514610dd557632793d5d21461003e57600080fd5b34610dd05761007061007561005236611f86565b6000610120529290610062612296565b6101205260609336916120f5565b6122b6565b600060e05261008381613bf2565b60e052604061038052600080808080805b61009d87613bf2565b51821015610dc457506100b28160e051612196565b516100c46100bf82612364565b6124b6565b6100e46100cf6121aa565b82906020815191012090602081519101201490565b610d7c575b6100f46100cf612220565b610d2b575b610164610380515161010e61038051826120b4565b600981527f7464784d6f64756c6500000000000000000000000000000000000000000000006020918201528251908301207f6f1c9533f85324bc119f3689d641a35996bdbfce949a5b36ae5ef040c09e2c091490565b610c0a575b6101d59061038051519061018061038051836120b4565b601382527f7464784d6f64756c654964656e7469746965730000000000000000000000000060209283015280519101207f6d3b4de4f5b6531723dfb0e5d8257d4dbfe34b65370323640e41f5cf63ee9a4f1490565b610436575b5084908161042e575b81610426575b8161041e575b816101fd5760010190610094565b509450505050505b156103f4576103805151610380518152610230610120515160606103805184015260a0830190612039565b917fffffffffffffffff00000000000000000000000000000000000000000000000060206101205101511660608301527fffffffffffffffff000000000000000000000000000000000000000000000000610380516101205101511660808301528183036020830152805180845260208401906020808260051b8701019301916000905b8282106102c15785850386f35b909192937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087820301825284516080610374610306835160a0865260a0860190612039565b7fffffffffffffffff00000000000000000000000000000000000000000000000060208501511660208601527fffffffffffffffff00000000000000000000000000000000000000000000000061038051850151166103805186015260608401518582036060870152612039565b910151916080818303910152602080835192838152019201906000905b8082106103af575050506020806001929601920192019092916102b4565b909192602060606001926103e9875160ff815116835267ffffffffffffffff8582015116858401526103805101516103805183019061202c565b019401920190610391565b7f5aeb6bce0000000000000000000000000000000000000000000000000000000060005260046000fd5b8491506101ef565b8391506101e9565b8291506101e3565b90935061044a919650600061042052613bf2565b61042081905251600061047161045f836126f1565b61038051516103c0526103c0516120b4565b816103c051527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06104a1836126f1565b01815b818110610b8a57505060006103a052503d610320523d610340523d610400523d6103e0525b806103a051106104e257506103c05194600192846101da565b909491936104ff6104f96103a05161042051612196565b51613bf2565b610360526000610180525b61051a6103a05161042051612196565b51600060039050506060908051600281600716119160208216928260381c63ffffffff169180158415179463ffffffff8211958260181b957fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff169315610a18575b5050505050505051610180511015610a04576106076105ac6100bf6105a66101805161036051612196565b51612364565b6105b76100cf612220565b6109d7575b6105c76100cf612f95565b61099f575b6105d76100cf612f1f565b610947575b6105e76100cf612f5a565b6108e8575b6105f46121e5565b6020815191012090602081519101201490565b61061c575b600161018051016101805261050a565b61062f6104f96101805161036051612196565b60c05260c0515160a05261064460a0516126f1565b610653610380515191826120b4565b60a05181527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061068460a0516126f1565b0160005b8181106108b857505060806106a36103a0516103c051612196565b5101526000610100525b60a05161010051101561060c576106d26104f96101009796959493975160c051612196565b60805260005b608051518110156108a1576106f56100bf6105a683608051612196565b6107006100cf612709565b6107ca575b906107246001926107176100cf612744565b610783575b6105f461277f565b61072f575b016106d8565b61077e61075261074d6100bf61074785608051612196565b51613a0f565b613dcc565b6103805161077761010051608061076f6103a0516103c051612196565b510151612196565b51016127ba565b610729565b67ffffffffffffffff6107a66107a16100bf61074787608051612196565b612887565b1660206107c261010051608061076f6103a0516103c051612196565b51015261071c565b506107da6104f982608051612196565b906107ea6100bf6105a68461215a565b91610380515061085b610380515161080561038051826120b4565b600681527f69737673766e00000000000000000000000000000000000000000000000000006020918201528451908501207f22402e2860cb074cd5b23d7be21f9d4928c0842771359c97717295e5cb1af67c1490565b156103f45760019260ff61087c6108776107476107249561215a565b612666565b1661089661010051608061076f6103a0516103c051612196565b515291925050610705565b5094909192939460016101005101610100526106ad565b60209061038051516108c981612098565b6000815260008382015260006103805182015282828601015201610688565b7fffffffffffffffff0000000000000000000000000000000000000000000000006109276109226100bf6107476101805161036051612196565b6127c6565b60c01b166103805161093f6103a0516103c051612196565b5101526105ec565b7fffffffffffffffff0000000000000000000000000000000000000000000000006109816109226100bf6107476101805161036051612196565b60c01b1660206109976103a0516103c051612196565b5101526105dc565b6109bd6109b86100bf6107476101805161036051612196565b6142db565b60606109cf6103a0516103c051612196565b5101526105cc565b6109ed6100bf6107476101805161036051612196565b6109fd6103a0516103c051612196565b51526105bc565b9391949060016103a051016103a0526104c9565b9690919293949596610b835750610b725761038051519460208601948594805b610b24575050508484037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001918260051c865284610380515263ffffffff8611610400516103e0513e8560381b176020179052610380511115610aa0575b808080808061057b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080846020939b98959b9a979a99969994038b01015b83518151855281520191019080821015610b13577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602091610ad6565b505092959491949390933880610a96565b958660209782528051908461032051610340513e83827fffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffff1617905260181c63ffffffff169687910196610a38565b50509150503880808080808061057b565b958061057b565b610380515160a0810181811067ffffffffffffffff821117610bdd579060209291610380515260608152848382015284610380518201526060808201526060608082015282826103c051010152016104a4565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b9096959294919350610c1b87613bf2565b94610c24612296565b9660005b8751811015610d11578088610c81610c586100bf61074785610c526100bf6105a660019a89612196565b95612196565b91610c646100cf612f1f565b610cd8575b610c746100cf612f5a565b610c9e575b6105f4612f95565b610c8d575b5001610c28565b610c96906142db565b8a5238610c86565b7fffffffffffffffff000000000000000000000000000000000000000000000000610cc8846127c6565b60c01b168d610380510152610c79565b8c60207fffffffffffffffff000000000000000000000000000000000000000000000000610d05866127c6565b60c01b16910152610c69565b509791949295509295610120526101d56001949050610169565b92506000610d46610d3e6100bf84613a0f565b6105f461225b565b15610d5457506001926100f9565b807f31ab78b50000000000000000000000000000000000000000000000000000000060049252fd5b955060006003610d8e61087784613a0f565b10610d9c57506001956100e9565b807f8dcbb5950000000000000000000000000000000000000000000000000000000060049252fd5b95505050505050610205565b600080fd5b34610dd057610de336611f86565b6040519161010083019083821067ffffffffffffffff83111761155657610e4792610070926040526000855260006020860152600060408601526000606086015260006080860152600060a0860152600060c0860152600060e086015236916120f5565b80610e5181613bf2565b6000906000906000916000806000926000946000976000908c600091610e7960409d5b613bf2565b5183101561154357908c8392610e928796958e98612196565b5191610eaf610ea36100bf85612364565b60006104405293613a0f565b926104405150610f1a8251610ec484826120b4565b600781527f74636254797065000000000000000000000000000000000000000000000000006020918201528251908301207ff1ef84607333b53a2004a6165e8ab88f55e83518116e21fd0b464b25722b2c3f1490565b156110d457505050610f2d60ff91612666565b1690526001938e905b610f4e575b506001610e7991019192938e918e613bf2565b915083806110cd575b806110c6575b806110bf575b806110b8575b806110b1575b600363ffffffff604083950151610440515016101561109a575b5081610f95578d610f3b565b50999a505050505050505050505b156103f45780519060ff83511682526020830151600281101561106b57610100937fffff0000000000000000000000000000000000000000000000000000000000009260e092602086015263ffffffff6040830151169085015267ffffffffffffffff606082015116606085015267ffffffffffffffff608082015116608085015263ffffffff60a08201511660a08501527fffffffffffff000000000000000000000000000000000000000000000000000060c08201511660c085015201511660e0820152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b909150806110aa575b908e610f89565b50896110a3565b5088610f6f565b5087610f69565b5086610f63565b5085610f5d565b5084610f57565b909197506110e66100cf949394612220565b156111c8575050508a9b506110fa906124b6565b8c516111609061110a8f826120b4565b600381527f53475800000000000000000000000000000000000000000000000000000000006020918201528251908301207f8ec2409669ebaea0d83544d244ace12e63a771ee426935bcc157d252eb5f30461490565b1561117957506104405160208f01525b8d60019b610f36565b611187919a506105f461225b565b1561119a57600160208e01528998611170565b7f5aeb6bce000000000000000000000000000000000000000000000000000000006104405152600461044051fd5b81519798969795969495929492611239906111e384826120b4565b600581527f666d7370630000000000000000000000000000000000000000000000000000006020918201528251908301207f32d406b8d9e731fc9123600c61c66a13cbea488c34cc3d265954e87695b412101490565b15611289575050509060c07fffffffffffff0000000000000000000000000000000000000000000000000000806112776109228f9a999897966124b6565b60d01b16169101526001948e90610f36565b61129c6100cf9e9399989796959e6121aa565b156112c1575050506112b263ffffffff91612666565b1660408b01526001998a610f36565b8151929d8e9a90949390929190611332906112dc84826120b4565b600981527f69737375654461746500000000000000000000000000000000000000000000006020918201528251908301207f6076d2bbe55ad3c4b6ee7953ef9ae2e5b181f22d3eba84d569dbda4b99713e821490565b1561135f5750505067ffffffffffffffff6113516107a16060936124b6565b169101526001958e90610f36565b81519a9b929a6113c99061137384826120b4565b600a81527f6e657874557064617465000000000000000000000000000000000000000000006020918201528251908301207f763eaaeea7af2e6dd24f817d656a3a2f55700b655f70efd88231fddddb3c82281490565b156113f65750505067ffffffffffffffff6113e86107a16080936124b6565b169101526001968e90610f36565b81519b9c929b6114609061140a84826120b4565b600581527f70636549640000000000000000000000000000000000000000000000000000006020918201528251908301207f1f5653bc1bc6e041fc665b046bb7155c6612899340379c5caa4d030682426aea1490565b156114aa575050507fffff0000000000000000000000000000000000000000000000000000000000008061149861092260e0946124b6565b60f01b16169101526001978e90610f36565b8151929c9392611516929091906114c190836120b4565b601782527f7463624576616c756174696f6e446174614e756d62657200000000000000000060209283015280519101207f4e781c4bf4f96634340ceb53dcdb4730bdc24be94fdc96d345fdaa60d3d6d7b91490565b611521575b50610f36565b60a0919b5061153463ffffffff91612666565b169101526001988e903861151b565b5050509899505050505050505050610fa3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b34610dd0576100706115a561159936611f86565b929060009336916120f5565b6115ae81613bf2565b60008060609260005b6115c086613bf2565b51811015611f7b576115d28183612196565b516115df6100bf82612364565b6115ea6100cf6121aa565b611f62575b6115fb906105f46121e5565b611f4a575b508380611f43575b611614576001016115b7565b5050909192505b81611f3b575b50156103f4578051600091611635826126f1565b9261164360405194856120b4565b8284527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611670846126f1565b0190805b828110611ebd575050506000915b8083106117e95750505090604051918291604083019083526040602084015281518091526060830190602060608260051b8601019301916000905b8282106116cc57505050500390f35b91939092947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0908203018252845161ffff815116825260a0611732611720602084015160c0602087015260c0860190611ff5565b60408401518582036040870152611ff5565b9167ffffffffffffffff60608201511660608501526117596080820151608086019061202c565b01519160a0818303910152815180825260208201906020808260051b85010194019260005b8281106117a057505050505060208060019296019201920185949391926116bd565b90919293946020806117dc837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087600196030189528951612039565b970195019392910161177e565b6117f96104f98484979597612196565b936000915b61180b6104f98886612196565b51831015611ead576118236100bf6105a68589612196565b61182e6100cf612709565b15611cda5750611853610e74610070611847868a612196565b51600061028052613a0f565b6101e0526002850361195d57610280519361186c6140f7565b95610280519561028051905b6101e051518210156118f0576118976100bf6105a6846101e051612196565b906118b76118ae610877610747866101e051612196565b926105f4614138565b156118cd575061ffff60019116915b0190611878565b91886118ea60ff6118e16001959c93614173565b9b16918c612196565b526118c6565b939592979196601091500361192f57600192602061190e8b87612196565b51019061ffff61191e8c88612196565b5191169052525b01919392936117fe565b7f5aeb6bce000000000000000000000000000000000000000000000000000000006102805152600461028051fd5b60038593969297951460001461192f57610280516101a05261197d6140f7565b610260526119896140f7565b6102c05261028051610300525b6101e05151610300511015611c8f576119bb6100bf6105a6610300516101e051612196565b610220526119e26119ca614138565b61022051906020815191012090602081519101201490565b15611a165761ffff611a00610877610747610300516101e051612196565b166101a0525b6001610300510161030052611996565b611a3b611a2d61030097959397516101e051612196565b51610280516102e052613bf2565b6102e052610280516102a0819052610240526040610200525b611a676104f9610300516101e051612196565b51610240511015611c5157611a93611a85610240516102e051612196565b51610280516101c052613bf2565b6101c052610280515b611aaf6104f9610240516102e051612196565b51811015611c405780611b37611ad06100bf6105a66001956101c051612196565b6102005180519190611ae290836120b4565b600382527f73766e000000000000000000000000000000000000000000000000000000000060209283015280519101207f4294eaea1f2439036f92859f5d2aee946a31a48b4d3ebceca5872241d2d718091490565b611b42575b01611a9c565b610200518051611baf91611b5690826120b4565b601081527f746478746362636f6d706f6e656e7473000000000000000000000000000000006020918201526102205180519101207fd039dfd6fdf9579033b5870aaca39cde10fbba50b5b2d55d2fa2454f62ea34541490565b15611bfd5760ff611bc9610877610747846101c051612196565b6102805150166102a05161016052611be36102a051614173565b6102a052611bf7610160516102c051612196565b52611b3c565b60ff611c12610877610747846101c051612196565b6102805150166102a05161014052611c2c6102a051614173565b6102a052611bf76101405161026051612196565b506001610240510161024052611a54565b9490929460106102a0510315611a06577f5aeb6bce000000000000000000000000000000000000000000000000000000006102805152600461028051fd5b9192939590946001906020611ca48985612196565b51016040611cb28a86612196565b5101611cbe8a86612196565b5161ffff6101a0511690526102c0519052610260519052611925565b611ceb6100cf969596949294612744565b15611d2657508067ffffffffffffffff611d106107a16100bf6107476001968c612196565b166060611d1d8a86612196565b5101525b611925565b611d316100cf61277f565b15611d5c575080611d21611d5061074d6100bf6107476001968c612196565b60806107778b87612196565b611dc4604091825190611d6f84836120b4565b600b82527f61647669736f727949447300000000000000000000000000000000000000000060209283015280519101207fe86af6009aebc04f295f78c7e3eb2fcaace71ae116a426fa95c0ee7718f2b4531490565b611dd2575b50600190611925565b611ddf6104f98389612196565b611dec6104f9848a612196565b5191611e03611dfa846126f1565b915191826120b4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611e30846126f1565b0160005b818110611e9c57505060a0611e498b87612196565b51015260005b828110611e5d575050611dc9565b80611e95818c60a0611e81611e7a6100bf6107476001998b612196565b928b612196565b51015190611e8f8383612196565b52612196565b5001611e4f565b806060602080938601015201611e34565b9395909450600191500191611682565b60405160c0810181811067ffffffffffffffff821117611f0e57906020929160405283815260608382015260606040820152836060820152836080820152606060a082015282828901015201611674565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b905083611621565b5082611608565b909250611f58919450613bf2565b9260019187611600565b94509650611f7261087788613a0f565b966001946115ef565b50509091925061161b565b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc830112610dd05760043567ffffffffffffffff8111610dd05782602382011215610dd05780600401359267ffffffffffffffff8411610dd05760248483010111610dd0576024019190565b906020808351928381520192019060005b8181106120135750505090565b825160ff16845260209384019390920191600101612006565b90600882101561106b5752565b919082519283825260005b8481106120835750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201612044565b6060810190811067ffffffffffffffff82111761155657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761155657604052565b92919267ffffffffffffffff8211611556576040519161213d601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001846120b4565b829481845281830111610dd0578281602093846000960137010152565b8051156121675760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156121675760209160051b010190565b604051906121b96040836120b4565b600782527f76657273696f6e000000000000000000000000000000000000000000000000006020830152565b604051906121f46040836120b4565b600982527f7463624c6576656c7300000000000000000000000000000000000000000000006020830152565b6040519061222f6040836120b4565b600282527f69640000000000000000000000000000000000000000000000000000000000006020830152565b6040519061226a6040836120b4565b600382527f54445800000000000000000000000000000000000000000000000000000000006020830152565b604051906122a382612098565b6000604083606081528260208201520152565b6040516020810181811067ffffffffffffffff82111761155657604052600081526040526000906020810190602081518201019081830361230d575b5082159110176122ff5790565b63101827966000526004601cfd5b91819350906123589160008251811a946022845363ffffffff81113d3d3e8060d81b7f22000000000000000000000000000000000000000000000000000000000000001782526133e6565b929092918153386122f2565b9060609160808151166123745750565b61237f919250613b03565b90565b91600092600481019283111590516000915b600483036123a157505050565b90919482861a907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd082019083667e0000007e03ff831c16156122ff57600192826007601060307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0961160051b9211020190039060041b010195019190612394565b90607f8111156124ac5780601f538060061c601e536107ff8111156124945780600c1c601d5361ffff81111561247a5780621100009160121c601c5360005163073f3f3f1663f08080801760e01b83521060021b0190565b50600390600051620f3f3f1662e080801760e81b81520190565b50600290600051611f3f1661c0801760f01b81520190565b9060019181530190565b908151601f81840101906001825160001a600286015161ff00161761222214911116156122ff57602160206040510193015b818103612528575050600082526020604051927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084820301845201604052565b6001819492945160001a910190605c8103612647575b50908382036125555763101827966000526004601cfd5b6001825160001a92019160016b100000000000800400000000821c1661263a5784607582146125d157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffab72080000000c000000000000000a0000000d000991011a90816125c357506122ff565b600191815301925b906124e8565b6125e091506125fb9293612382565b818161dbff821161d80083101715612601575b505092612422565b926125cb565b620ffc0093506126219192506002615c75825160f01c1489029101612382565b92906103ff1691600a1b160162010000019038806125f3565b90600191815301926125cb565b60228103612658575050823861253e565b9160019192815301926125cb565b9060009180516000905b60ff6001808401938501015116947f1999999999999999999999999999999999999999999999999999999999999999811190600a029060097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd080898501019801119187101717150290818110156126e75790612670565b509050156122ff57565b67ffffffffffffffff81116115565760051b60200190565b604051906127186040836120b4565b600382527f74636200000000000000000000000000000000000000000000000000000000006020830152565b604051906127536040836120b4565b600782527f74636244617465000000000000000000000000000000000000000000000000006020830152565b6040519061278e6040836120b4565b600982527f74636253746174757300000000000000000000000000000000000000000000006020830152565b600882101561106b5752565b90600082517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821160208087015160f01c17613078141660011b915b7403010a071000000b0104040208000c05090d060e0f6d03e4088843e41bac00000000000060ff6001808701968a010151161c601f161a908460fc1c82151715029360041b0101908281101561287d5790917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90612804565b509250156122ff57565b6014815103612ec1576000600460609083516004811115612eb9575b8015612eb1575b50808310612e04575b506128be91506141cf565b906005600760609083516007811115612dfc575b6005811115612df4575b50808310612d47575b506128f091506141cf565b906008600a6060908351600a811115612d3f575b6008811115612d37575b50808310612c8a575b5061292291506141cf565b90600b600d6060908351600d811115612c82575b600b811115612c7a575b50808310612bcd575b5061295491506141cf565b92600e601060609084516010811115612bc5575b600e811115612bbd575b50808310612b10575b5061298691506141cf565b9160119060139060609281516013811115612b08575b6011811115612b00575b50828110612a2e575b5050509162023ab16101907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff50593936129e962015180966141cf565b9860038210900393610e10603c8487069202990297610301600c60096064850495010661f4ff0201600b1c019061016d8160021c910201010392040201010201010190565b6040519281900380845292959350017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830181165b808301518188015201908115612a9d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090612a65565b5050600081850160200152603f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01683016040529162023ab16101907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff505936129af565b9050386129a6565b92508261299c565b90508160405191039182825284017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8501165b808301518185015201908115612b7e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090612b46565b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f61298693600060208286010152011681016040523861297b565b925038612972565b905080612968565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8501165b808301518185015201908115612c3b57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090612c03565b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f612954936000602082860101520116810160405238612949565b925038612940565b905080612936565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8501165b808301518185015201908115612cf857907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090612cc0565b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f612922936000602082860101520116810160405238612917565b92503861290e565b905080612904565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8501165b808301518185015201908115612db557907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090612d7d565b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f6128f09360006020828601015201168101604052386128e5565b9250386128dc565b9050806128d2565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8501165b808301518185015201908115612e7257907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090612e3a565b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f6128be9360006020828601015201168101604052386128b3565b9250386128aa565b9050806128a3565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f696e76616c69642069736f20737472696e67206c656e677468000000000000006044820152fd5b60405190612f2e6040836120b4565b600a82527f61747472696275746573000000000000000000000000000000000000000000006020830152565b60405190612f696040836120b4565b600e82527f617474726962757465734d61736b0000000000000000000000000000000000006020830152565b60405190612fa46040836120b4565b600882527f6d727369676e65720000000000000000000000000000000000000000000000006020830152565b5b6001640100002600825160001a1c161561237f57600101612fd1565b9063ffffffff81113d3d3e60181b907fffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffff161790565b9063ffffffff81113d3d3e60981b907fffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffff161790565b9063ffffffff81113d3d3e60381b907fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff161790565b9063ffffffff81113d3d3e60b81b907fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff161790565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600495949796978560405199039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600595949796978560405199039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600695949796978560405199039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600195949796978560405199039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600295949796978560405199039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b169116171717825260208201604052565b93926134006133fa60009493600051612fed565b92612fd0565b92818410156135185750825160001a6022811490605b811460016703ff200000000000607b8414931c16926134f9576134eb576134d2576134bb576004830181811115613473575b50600583019081116122ff576466616c7365835160d81c036122ff5761237f926133fa928296613162565b8390845160e01c90637472756582146134a75750636e756c6c03613448576133fa92959150600461237f9401958692613203565b61237f95508093506133fa94915096613162565b90916134ca9261237f95613859565b929092612fd0565b5091906134df93946135f6565b90919061237f90612fd0565b505091906134df939461351f565b50505093826135106133fa939661237f9592613771565b9586926130c1565b9450505090565b939060009081600185015b868110156135f157869082156135bb575b61354592896133e6565b80828061355a575b5050506001865b0161352a565b948561356e82600194959851604017613022565b905201935160001a605d811461359457602c1461358c57808061354d565b600190613554565b506135b29196506135b8959350600190979294975b01958694613057565b906132a4565b91565b6135c59150612fd0565b90605d825160001a146135da5790869061353b565b95506135b894925060016135b291979294976135a9565b6122ff565b939091600092600182015b858110156135f15784156136f2575b61361990612fd0565b6136238682613771565b908661362e83612fd0565b603a815160001a14613649575b509050600191505b01613601565b96600161365a93949801908a6133e6565b9080928197839461366f575b5088915061363b565b6136a7827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08d6136ac9503019203845160801761308c565b613022565b90525160001a607d81146136d257602c146136ca5780808080613666565b600190613643565b506135b894955060016136ec919792949701958694613057565b90613345565b6136fb90612fd0565b607d815160001a03613610576135b894955060016136ec91979294976135a9565b6001667e0000007e03ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08484015160001a011c16156122ff5760058203613762575050565b600161376f92019061371c565b565b818110156122ff576001015b805160001a6022811461380c57605c0361380457600181015160001a60016a05101104000000000020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde83011c166137fb576075146137e75750805b8110156122ff5760010190565b806137f5600260069361371c565b0161377d565b5060020161377d565b60010161377d565b50906137da565b90815b600a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0825160001a01101561384d57600101613816565b8092146001166122ff57565b919092508092602d825160001a14613a04575b600a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0855160001a0110156122ff5760306001855160001a950194036139c1575b602e845160001a146139ae575b835160658160001a6020171461396b575b50906003917fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0604051968589039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b16911617171781526020810160405291565b60016003939295620100017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff26139a694841a011a0101613813565b9390916138cb565b9260016139bb9101613813565b926138ba565b9190925b600a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0825160001a0110156139fc576001016139c5565b9290916138ad565b60018201935061386c565b8051919060608115841517613afe57508260581c63ffffffff16928060101615613a37575050565b8060781c63ffffffff16604051948260d81c63ffffffff16017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8401165b808301518189015201908115613ab057907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090613a78565b5050604090808652850160006020820152016040528363ffffffff81113d3d3e60581b907fffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffff16176010179052565b925050565b8051919060608115841517613afe57508260981c63ffffffff16928060081615613b2b575050565b8060b81c63ffffffff16604051948260d81c63ffffffff16017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8401165b808301518189015201908115613ba457907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090613b6c565b5050604090808652850160006020820152016040528363ffffffff81113d3d3e60981b907fffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffff16176008179052565b606090805190600282600716119060208316928060381c63ffffffff169180158215179363ffffffff8211923d3d908460181b983d983d947fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff169515613c61575b505050505050505050505090565b9a909192939495969798999a613dc55750613dac576040519860208a019796889695949392885b613d5c57505050506040945087840396877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001948560051c8a52865263ffffffff8911913e8660381b1760201790521015613cec575b808080808080808080613c53565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080602092938501015b83518151855281520191019080821015613d53577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602091613d16565b50503880613cde565b88602099899596979899528051908383883e84827fffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffff1617905260181c63ffffffff16988994019796959493613c88565b5050505050509150503880808080808080808080613c53565b9980613c53565b6040613e338151613ddd83826120b4565b600881527f5570546f446174650000000000000000000000000000000000000000000000006020918201528351908401207f8dd11fcce5839087111530125177803569655488ae47b1f980ef0b1a711bf07c1490565b15613e3f575050600090565b613ea48151613e4e83826120b4565b600981527f4f75744f664461746500000000000000000000000000000000000000000000006020918201528351908401207fe1dbc1592712cb224ab58df345a7bffafe7d5092dc9eff532076ee2c5e6870991490565b15613eb0575050600490565b613f158151613ebf83826120b4565b601c81527f4f75744f6644617465436f6e66696775726174696f6e4e6565646564000000006020918201528351908401207f605a88f0014fcefe2d398f17b974556e2ae7481bfdc313f7e0af48c270400c491490565b15613f21575050600590565b613f868151613f3083826120b4565b601381527f436f6e66696775726174696f6e4e6565646564000000000000000000000000006020918201528351908401207f820e8e2a851961706b111f73b809da9ccf7c4d4181cd135f0696ca2daa5059421490565b15613f92575050600390565b6140068151613fa26060826120b4565b602181527f436f6e66696775726174696f6e416e64535748617264656e696e674e6565646560208201527f64000000000000000000000000000000000000000000000000000000000000008382015283906020815191012090602081519101201490565b15614012575050600290565b614077815161402183826120b4565b601181527f535748617264656e696e674e65656465640000000000000000000000000000006020918201528351908401207f7ad9f5b3c5180451fdebfb145dcb7bcd2dc9f95342d3659e0dcc8d07b31182a11490565b15614083575050600190565b6140e891614093825192836120b4565b600782527f5265766f6b65640000000000000000000000000000000000000000000000000060209283015280519101207f78b54e92f33559320da4a0c1454741ea1f5c5fa31eb1dd482882c6df0231e4781490565b156140f257600690565b600790565b604051610220919061410983826120b4565b60108152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001366020840137565b604051906141476040836120b4565b600682527f70636573766e00000000000000000000000000000000000000000000000000006020830152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146141a05760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906000805b8351821015613afe5760006020838601015160f81c6030811015806142d0575b614205575b505090600101906141d4565b600a830292808404600a14901517156142a357807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08101116142a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09083010180921161427657506001386141f9565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b5060398111156141f4565b60006010606091835160108111156144f1575b80156144e9575b5081811061443e575b505060109160309060609381516030811115614436575b601081111561442e575b5082811061437f575b50505061433761433d916127c6565b916127c6565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000006040519260801b16602083015260308201526030815261237f6050826120b4565b60405192819003808452929450017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830181165b8083015181870152019081156143ed57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0906143b5565b5050600083820160200152603f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261433761433d38614328565b90503861431f565b925082614315565b8091925060405192039081835283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8401165b8083015181860152019081156144ad57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090614475565b5050600082820160200152603f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810160405238806142fe565b9050386142f5565b9150816142ee56fea26469706673582212205c7e1cf9789001b791ebaf02b6fdfc87818ba3b471aa8f6abe1cb0b3155240ad64736f6c634300081b0033", + "nonce": "0x1", "chainId": "0x1555e3" }, "additionalContracts": [], @@ -22,31 +22,31 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x3677f7", + "cumulativeGasUsed": "0x3b9881", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x7a2a2015ff331a3fd59df1f3d87339a03b11626e5d47a38651bc4e61a2c0d7ea", + "transactionHash": "0xd05eb25f7883b0d5caf35b460ffee993d710b4129007627db23c097eb5eb3b7a", "transactionIndex": "0x1", - "blockHash": "0xa70273b3f021969060f71d6a7702dfcc0735d74b3108e1fc437ec2dfa4e6c697", - "blockNumber": "0xa0d4b", - "gasUsed": "0x35cc6d", + "blockHash": "0xece80eb761917c875423e1827484f5eaf0da4859ad2063c7ff6c483b5dcb1aac", + "blockNumber": "0x63a0ae", + "gasUsed": "0x3aed33", "effectiveGasPrice": "0xfd", - "from": "0x3d089c2f2cb86d4efde153c81cabd4579784430b", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", "to": null, - "contractAddress": "0xc2a662e08a35513596e22d0ac236ce72e59125ee", + "contractAddress": "0x71056b540b4e60d0e8efb55fad487c486b09fff5", "l1BaseFeeScalar": "0x558", - "l1BlobBaseFee": "0x58042253b1", + "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xc5fc5", - "l1Fee": "0x908dd4a269b6e", - "l1GasPrice": "0x4d1ce6a45", - "l1GasUsed": "0x205b1" + "l1Fee": "0x76f2c4ab6", + "l1GasPrice": "0x9f9ba55", + "l1GasUsed": "0x220c6" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1720183417, + "timestamp": 1731924289, "chain": 1398243, - "commit": "ec96ab5" + "commit": "1cc539f" } \ No newline at end of file diff --git a/broadcast/DeployHelpers.s.sol/1398243/deployPckHelper-latest.json b/broadcast/DeployHelpers.s.sol/1398243/deployPckHelper-latest.json index 33a6589..80d6f81 100644 --- a/broadcast/DeployHelpers.s.sol/1398243/deployPckHelper-latest.json +++ b/broadcast/DeployHelpers.s.sol/1398243/deployPckHelper-latest.json @@ -1,18 +1,18 @@ { "transactions": [ { - "hash": "0xf5e5d656505c1a542380bc0235873676aa99b321759da37567f35b57eede638d", + "hash": "0x82edd7879a3fb6398f58a351caf0ac3e20e83ef628a1334f7cafc5b27721eba5", "transactionType": "CREATE", "contractName": "PCKHelper", - "contractAddress": "0x5213c0e3ab478dbc83e8afff8909717332e4f8e1", + "contractAddress": "0x4aca9c0eb063401c9f5c2fc4487dbc5ccf1c9e2b", "function": null, "arguments": null, "transaction": { - "from": "0x3d089c2f2cb86d4efde153c81cabd4579784430b", - "gas": "0x2960b3", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", + "gas": "0x28a820", "value": "0x0", - "input": "0x6080806040523461001657612501908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806335c757bd146100975780633b79a61e14610092578063634fdad51461008d5780636d3537a014610088578063b29b51cb14610083578063e81c707e1461007e578063ed333785146100795763fcf0be241461007457600080fd5b6108d2565b61087a565b61071c565b610545565b6104ec565b61048e565b6102fe565b3461014e5761014a61013e6100ab36610153565b61013861012d61012261011761010c6101016100f16100e66100d66100d1368b8d610673565b611474565b6100e1368b8d610673565b610a83565b6100e1368a8c610673565b6100fc36898b610673565b610b9a565b6100fc36888a610673565b6100fc368789610673565b6100fc368688610673565b6100fc368587610673565b6100e1368486610673565b91610bbf565b60405191829182610221565b0390f35b600080fd5b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261014e5760043567ffffffffffffffff9283821161014e578060238301121561014e57816004013593841161014e576024848301011161014e576024019190565b60005b8381106101ce5750506000910152565b81810151838201526020016101be565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361021a815180928187528780880191016101bb565b0116010190565b9060206102329281815201906101de565b90565b90610232916020815281516020820152602082015190610263610120928360408401526101408301906101de565b9160408401516060830152606084015160808301526102c96102b56080860151947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe095868683030160a08701526101de565b60a0860151858583030160c08601526101de565b60c085015160e08401526102ee60e086015191610100928686830301848701526101de565b94015192828503019101526101de565b3461014e5761014a61047d61031236610153565b919061031c610952565b9261047761046c61038a61045c61043361040a6103ea6103c16103b68a8d6103a96103a48d61039f6103956103636103586100d136868b610673565b6100e136868b610673565b9d8e6103798161037436888d610673565b610c23565b6101008901526100e136868b610673565b6100fc36858a610673565b9586923691610673565b610c5a565b610c94565b90526100fc368c8e610673565b6100fc368b8d610673565b6103da6103d3826100e1368d8f610673565b8a8c610bbf565b60208d01526100fc368a8c610673565b6103f581898b610d15565b60608d015260408c01526100fc36898b610673565b61042361041c826100e1368b8d610673565b888a610bbf565b60808b01526100fc36888a610673565b61044c610445826100e1368a8c610673565b8789610d5f565b60a08a01526100fc368789610673565b60c08801526100fc368587610673565b6100fc368486610673565b91610ecf565b60e082015260405191829182610235565b3461014e5761014a6104d86104a236610153565b61013861012d61012261011761010c6104cd6104c26100d136898b610673565b6100e136898b610673565b6100e136888a610673565b6040519182916020835260208301906101de565b3461014e5761014a6104d861050036610153565b61053f61012d61012261011761010c6101016100f16105346100d66105296100d1368c8e610673565b6100e1368c8e610673565b6100fc368a8c610673565b91610d5f565b3461014e5760206105a06103a461039f61055e36610153565b919061059861058d6105826105776100d1368887610673565b6100e1368887610673565b6100e1368786610673565b6100fc368685610673565b923691610673565b604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff8211176105f357604052565b6105a8565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105f357604052565b67ffffffffffffffff81116105f357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b92919261067f82610639565b9161068d60405193846105f8565b82948184528183011161014e578281602093846000960137010152565b92909493919461ffff6080850191168452602090608060208601528651809152602060a0860197019160005b8281106107055750505050846106f7918461023296970360408601526101de565b9160608184039101526101de565b835160ff16895297810197928101926001016106d6565b3461014e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014e5760043567ffffffffffffffff811161014e573660238201121561014e5761077c903690602481600401359101610673565b602435907fa3000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000006107d869ffffffffffffffffffff851684610a0d565b51160361081c57610804816107f36108109461014a94610a83565b906107fe8282610a83565b906110fa565b92949395909195610a1e565b604051948594856106aa565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e6f7420616e20657874656e73696f6e000000000000000000000000000000006044820152fd5b3461014e5760206108b361088d36610153565b6108ad61046c61012261011761010c6104cd6104c26100d136898b610673565b91610d15565b90421190816108c8575b506040519015158152f35b90504210386108bd565b3461014e5761094461093061014a6108e936610153565b6109086108fd6100d1959395368488610673565b6100e1368488610673565b9061092a61091e61038a846100fc36868b610673565b92610374368489610673565b94610ecf565b6040519384936040855260408501906101de565b9083820360208501526101de565b60405190610120820182811067ffffffffffffffff8211176105f3576040528160008152610100606091826020820152600060408201526000838201528260808201528260a0820152600060c08201528260e08201520152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051156109e85760200190565b6109ac565b8051600110156109e85760210190565b8051600210156109e85760220190565b9081518110156109e8570160200190565b15610a2557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c69642053475820657874656e73696f6e00000000000000000000006044820152fd5b69ffffffffffffffffffff7f200000000000000000000000000000000000000000000000000000000000000080610abc85841685610a0d565b511603610ad1576102329260501c16906115a6565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e6f74206120636f6e73747275637465642074797065000000000000000000006044820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9060018201809211610b6c57565b610b2f565b9060028201809211610b6c57565b6002019081600211610b6c57565b91908201809211610b6c57565b9069ffffffffffffffffffff9060a01c1660018101809111610b6c57610232916115a6565b61039f9061059861058d610582610232966100e1368887610673565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211610b6c57565b6020039060208211610b6c57565b91908203918211610b6c57565b9069ffffffffffffffffffff8082169160a01c16906001820191828111610b6c57816001910301918211610b6c57610232926118e3565b9069ffffffffffffffffffff808260501c169160a01c16906001820191828111610b6c57816001910301918211610b6c57610232926118e3565b80516020039060208211610b6c577f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82168203610b6c57602081519101519060208110610ce5575b509060031b1c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1638610cdc565b610d529061039f610d306102329496956100e1368986610673565b91610d57610d52610d46856100fc368c87610673565b9461039f368b86610673565b611abf565b963691610673565b610598610d7292936100fc368685610673565b7fff0000000000000000000000000000000000000000000000000000000000000069ffffffffffffffffffff92610dd87f030000000000000000000000000000000000000000000000000000000000000083610dd087851687610a0d565b511614611f02565b838160501c1691610de98385610a0d565b511661014e57610e15610e0f83610e0a610e2197610e1b9560a01c16610b5e565b610c16565b92610b5e565b91610bdb565b916118e3565b6041815103610e335761023290611f67565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636f6d70726573736564207075626c6963206b6579206e6f7420737570706f7260448201527f74656400000000000000000000000000000000000000000000000000000000006064820152608490fd5b90610ecb602092828151948592016101bb565b0190565b610eda368383610673565b9269ffffffffffffffffffff90610f387f03000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000610dd085851689610a0d565b60501c169160018301809311610b6c57610f99610f88610fba9261039f610f72610f676102329860209a6115a6565b6100e136858a610673565b95610598610f8d610f888961039f368887610673565b61202e565b976100fc368685610673565b6040519483610fb187955180928480890191016101bb565b84010190610eb8565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826105f8565b60405190610ff3826105d7565b600982527f2a864886f84d010d0100000000000000000000000000000000000000000000006020830152565b604051906060820182811067ffffffffffffffff8211176105f35760405260006040838281528260208201520152565b6040519061105c826105d7565b600a82527f2a864886f84d010d0102000000000000000000000000000000000000000000006020830152565b60405190611095826105d7565b600a82527f2a864886f84d010d0103000000000000000000000000000000000000000000006020830152565b604051906110ce826105d7565b600a82527f2a864886f84d010d0104000000000000000000000000000000000000000000006020830152565b9291909260009360009360009460609485948487955b61111b575b50505050565b6111258183610a83565b7f060000000000000000000000000000000000000000000000000000000000000069ffffffffffffffffffff91816111b061118b61116586851689610a0d565b517fff000000000000000000000000000000000000000000000000000000000000001690565b7fff000000000000000000000000000000000000000000000000000000000000001690565b036113e8576111d06111c28287610c5a565b6111ca610fe6565b906120eb565b61120757505060a090828186841c16921c16106000146111fe576111f49082610b9a565b91825b9092611110565b508291826111f7565b909a98969b508361122292949a989695506112289350610b9a565b88612163565b906112338289610a83565b9161123c61101f565b938260a092831c16935b85511515806113db575b806113ce575b6113bd578a8c61127961118b61116561126f8686610a83565b9489861690610a0d565b036113a85761129361128b828e610c5a565b6111ca61104f565b611385575b8b6112ae6112a68383610c5a565b6111ca611088565b611358575b6112c0826112c892610c5a565b6111ca6110c1565b611337575b50848482851c16106000146112eb576112e6908b610b9a565b611246565b5050505050919395509193505b805115159081611322575b81611314575b509438808080611115565b604001511515905038611309565b90506113316020820151151590565b90611303565b61134d919850611347908c610b9a565b8b610c5a565b6001865296386112cd565b97506112c86112c08261137461136e828d610b9a565b8c610c5a565b600160208c01529a925050506112b3565b99506113a398506113968a8c6122f4565b91151560408901529a9099565b611298565b50509598505050505092959194509493929190565b5050505050919395509193506112f8565b5060408601511515611256565b5060208601511515611250565b50949a505050505050565b60ff166020039060ff8211610b6c57565b60ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09116019060ff8211610b6c57565b60031b906107f860f8831692168203610b6c57565b60ff60649116029060ff8216918203610b6c57565b60ff600a9116029060ff8216918203610b6c57565b610232907f80000000000000000000000000000000000000000000000000000000000000006114a5611165836109ed565b16611509576114c26114bc6111656114c8936109ed565b60f81c90565b60ff1690565b6114ed6114de6114d9600293610b7f565b610bdb565b69ffffffffffffffffffff1690565b69ffffffffffffffffffff80911691169060a01b9060501b1790565b61155f6114de6114d961154c6114de607f611526611165886109ed565b60f81c1695600187036115645761153f611546916109fd565b5160f81c90565b95610b7f565b9369ffffffffffffffffffff8516610b8d565b6114ed565b8660028103611581575061157a61154691612480565b61ffff1690565b61158e90611546926123e1565b61159f61159a896113f3565b611435565b60ff161c90565b90610232917f80000000000000000000000000000000000000000000000000000000000000006115e16111656115db85610b5e565b84610a0d565b16611648576114c26114bc611165611602936115fc86610b5e565b90610a0d565b9061162b6114de6114d96116186114de85610b71565b9469ffffffffffffffffffff8616610b8d565b69ffffffffffffffffffff80911692169160a01b9160501b171790565b906116a26114de6114d96116186114de607f61166f61116561166989610b5e565b8a610a0d565b60f81c1696600188036116a7576114c26116929161168c89610b71565b906124b2565b965b61169d87610b71565b610b8d565b61162b565b87600281036116cd575061157a6116c7916116c189610b71565b90612494565b96611694565b6116e4906116c7926116de8a610b71565b90612431565b61159f61159a8a6113f3565b604051906060820182811067ffffffffffffffff8211176105f35760405260408252604082602036910137565b6040519061172a826105d7565b60208083523683820137565b9061174082610639565b61174d60405191826105f8565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061177b8294610639565b0190602036910137565b9060408101808211610b6c5782511061014e576117a06116f0565b916020809260409201019060208401925b8082101561180b5750806117f157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b6114d961180061180592610c08565b6124bc565b906117e3565b90919283518152818101809111610b6c5792818101809111610b6c57917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111610b6c57906117b1565b602090818301808411610b6c5781511061014e578161187561171d565b938192010190828401925b808210156118965750806117f157509192915050565b90919283518152818101809111610b6c5792818101809111610b6c57917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111610b6c5790611880565b919091818301808411610b6c5781511061014e57602061190283611736565b9381939201019060208401925b808210156119255750806117f157509192915050565b90919283518152818101809111610b6c5792818101809111610b6c57917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111610b6c579061190f565b906103e861ffff80931602918216918203610b6c57565b9061ffff809216918211610b6c57565b9061076c61ffff80931601918211610b6c57565b906107d061ffff80931601918211610b6c57565b91909161ffff80809416911601918211610b6c57565b60ff169060ff8211610b6c57565b60ff60019116019060ff8211610b6c57565b60ff60029116019060ff8211610b6c57565b60ff60039116019060ff8211610b6c57565b60ff60049116019060ff8211610b6c57565b60ff60059116019060ff8211610b6c57565b60ff60069116019060ff8211610b6c57565b60ff60079116019060ff8211610b6c57565b60ff60089116019060ff8211610b6c57565b60ff60099116019060ff8211610b6c57565b60ff600a9116019060ff8211610b6c57565b60ff600b9116019060ff8211610b6c57565b9060ff8091169116019060ff8211610b6c57565b60009081600d825114600014611eab57600560ff611aea611ae56114bc611165876109db565b611404565b161015611e9d57611afa906119ad565b611b03836119d7565b60ff16611b109083610a0d565b51611b1d9060f81c611404565b611b269061145f565b611b2f846119e5565b60ff16611b3c9084610a0d565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c611b6b91611aab565b611b7490611404565b60ff16611b80916119c1565b91611b8a816119f7565b60ff16611b979083610a0d565b51611ba49060f81c611404565b611bad9061145f565b611bb682611a09565b60ff16611bc39084610a0d565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c611bf291611aab565b611bfb90611404565b611c0482611a1b565b60ff16611c119084610a0d565b51611c1e9060f81c611404565b611c279061145f565b611c3083611a2d565b60ff16611c3d9085610a0d565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c611c6c91611aab565b611c7590611404565b611c7e906119d7565b90611c8883611a3f565b60ff16611c959085610a0d565b51611ca29060f81c611404565b611cab9061145f565b611cb484611a51565b60ff16611cc19086610a0d565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c611cf091611aab565b611cf990611404565b611d02906119d7565b92611d0c81611a63565b60ff16611d199086610a0d565b51611d269060f81c611404565b611d2f9061145f565b611d3882611a75565b60ff16611d459087610a0d565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c611d7491611aab565b611d7d90611404565b611d86906119d7565b94611d9082611a87565b60ff16611d9d9082610a0d565b51611daa9060f81c611404565b611db39061145f565b91611dbd90611a99565b60ff16611dc991610a0d565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c611df891611aab565b611e0190611404565b611e0a906119d7565b60ff169360ff169260ff169160ff169060ff169461ffff1694610232959062023ab1620151809394957ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff50593936003841090039261019091610e10603c8487069202990297610301600c60096064850495010661f4ff0201600b1c019061016d8160021c910201010392040201010201010190565b611ea690611999565b611afa565b509050611ef9611ef4611ed160ff611ecb611ae56114bc611165886109db565b16611972565b611eee6114c2611ee9611ae56114bc611165896109ed565b61144a565b906119c1565b611989565b90600291611afa565b15611f0957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f7420747970652042495420535452494e47000000000000000000000000006044820152fd5b90815160408114600014611f785750565b6040811015611ff857611f896116f0565b928160400360408111610b6c5760009160005b848110611faa575050505050565b807fff00000000000000000000000000000000000000000000000000000000000000611fd860019385610a0d565b5116611ff1611fe78387610b8d565b91871a918a610a0d565b5301611f9c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08193929301908111610b6c5761023291611785565b9081516020811460001461203f5750565b60208110156120b55761205061171d565b928160200360208111610b6c5760009160005b848110612071575050505050565b807fff0000000000000000000000000000000000000000000000000000000000000061209f60019385610a0d565b51166120ae611fe78387610b8d565b5301612063565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08193929301908111610b6c5761023291611858565b90815181510361215c5760009060005b8351811015612153577fff00000000000000000000000000000000000000000000000000000000000000806121308387610a0d565b51169061213d8385610a0d565b51160361214c576001016120fb565b5050905090565b50505050600190565b5050600090565b69ffffffffffffffffffff7f04000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000006121bc83861685610a0d565b5116036121d1576102329260501c16906115a6565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f742074797065204f4354455420535452494e4700000000000000000000006044820152fd5b60405190610220820182811067ffffffffffffffff8211176105f35760405260108252610200366020840137565b90602082519201517fffff00000000000000000000000000000000000000000000000000000000000090818116936002811061229857505050565b60020360031b82901b16169150565b604051906122b4826105d7565b600b82527f2a864886f84d010d0102110000000000000000000000000000000000000000006020830152565b80518210156109e85760209160051b010190565b60009161230c61230660009284610b9a565b83610a83565b9061231561222f565b926000905b6011821061232b5750505050600192565b909192946123398683610a83565b9061238d61238561235361234d8587610b9a565b86610c5a565b60028151106000146123cf5761237461236e61237d9261225d565b60f01c90565b60081c60ff1690565b935b85610c5a565b6111ca6122a7565b156123aa57506123a1600191965b83610b9a565b9392019061231a565b956123a1906123ca60ff600194166123c2878a6122e0565b9060ff169052565b61239b565b61236e6123db9161225d565b9361237f565b906020811161014e578060020180600211610b6c5782511061014e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6022916020036101000a01199101511690565b91906020821161014e57818101808211610b6c5783511061014e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209283036101000a0119920101511690565b805160041161014e576004015161ffff1690565b60028201808311610b6c5781511061014e57016002015161ffff1690565b9061153f91610a0d565b601f8111610b6c576101000a9056fea2646970667358221220fe8e56fcdd6041c74dbc83e256a7dfcd695e200e7f3d77aa8255bd032b1012d664736f6c63430008180033", - "nonce": "0x12b", + "input": "0x6080806040523460155761245d908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806335c757bd146100975780633b79a61e14610092578063634fdad51461008d5780636d3537a014610088578063b29b51cb14610083578063e81c707e1461007e578063ed333785146100795763fcf0be241461007457600080fd5b610920565b6108c8565b61076a565b6105b1565b610558565b6104ef565b61035f565b3461014d5761014961013d6100ab36610152565b61013761012d61012261011761010c6101016100f16100e66100d66100d1368b8d6106c3565b611545565b6100e1368b8d6106c3565b610acb565b6100e1368a8c6106c3565b6100fc36898b6106c3565b610bde565b6100fc36888a6106c3565b6100fc3687896106c3565b6100fc3686886106c3565b6100fc3685876106c3565b6100e183856109a0565b91610c03565b60405191829182610227565b0390f35b600080fd5b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261014d5760043567ffffffffffffffff811161014d578260238201121561014d5780600401359267ffffffffffffffff841161014d576024848301011161014d576024019190565b60005b8381106101d45750506000910152565b81810151838201526020016101c4565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610220815180928187528780880191016101c1565b0116010190565b9060206102389281815201906101e4565b90565b9061023891602081528151602082015261010061032b6102ee6102ba610272602087015161012060408801526101408701906101e4565b604087015160608701526060870151608087015260808701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08783030160a08801526101e4565b60a08601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08683030160c08701526101e4565b60c085015160e085015260e08501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085830301848601526101e4565b920151906101207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828503019101526101e4565b3461014d576101496104de61037336610152565b919061037d6109ab565b926104d86104cd6103eb6104bd61049461046b61044b6104226104178a8d61040a6104058d6104006103f66103c46103b96100d136868b6106c3565b6100e136868b6106c3565b9d8e6103da816103d536888d6106c3565b610c67565b6101008901526100e136868b6106c3565b6100fc36858a6106c3565b95869236916106c3565b610c9e565b610cd8565b90526100fc368c8e6106c3565b6100fc368b8d6106c3565b61043b610434826100e1368d8f6106c3565b8a8c610c03565b60208d01526100fc368a8c6106c3565b61045681898b610d59565b60608d015260408c01526100fc36898b6106c3565b61048461047d826100e1368b8d6106c3565b888a610c03565b60808b01526100fc36888a6106c3565b6104ad6104a6826100e1368a8c6106c3565b8789610da3565b60a08a01526100fc3687896106c3565b60c08801526100fc3685876106c3565b6100fc3684866106c3565b91610f8c565b60e08201526040519182918261023b565b3461014d5761014961054461050336610152565b61013761053961012261011761010c61052e6105236100d136898b6106c3565b6100e136898b6106c3565b6100e136888a6106c3565b6100e13684866106c3565b6040519182916020835260208301906101e4565b3461014d5761014961054461056c36610152565b6105ab61053961012261011761010c6101016100f16105a06100d66105956100d1368c8e6106c3565b6100e1368c8e6106c3565b6100fc368a8c6106c3565b91610da3565b3461014d57602061060c6104056104006105ca36610152565b91906106046105f96105ee6105e36100d13688876106c3565b6100e13688876106c3565b6100e13687866106c3565b6100fc3686856106c3565b9236916106c3565b604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761068457604052565b610614565b67ffffffffffffffff811161068457601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926106cf82610689565b916106dd6040519384610643565b82948184528183011161014d578281602093846000960137010152565b92909493919461ffff6080850191168452608060208501528551809152602060a0850196019060005b8181106107515750505084610743918461023896970360408601526101e4565b9160608184039101526101e4565b825160ff16885260209788019790920191600101610723565b3461014d5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014d5760043567ffffffffffffffff811161014d573660238201121561014d576107ca9036906024816004013591016106c3565b602435907fa3000000000000000000000000000000000000000000000000000000000000007fff0000000000000000000000000000000000000000000000000000000000000061082669ffffffffffffffffffff851684610a55565b51160361086a576108528161084161085e9461014994610acb565b9061084c8282610acb565b906111bd565b92949395909195610a66565b604051948594856106fa565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e6f7420616e20657874656e73696f6e000000000000000000000000000000006044820152fd5b3461014d5760206109016108db36610152565b6108fb6104cd61012261011761010c61052e6105236100d136898b6106c3565b91610d59565b9042119081610916575b506040519015158152f35b905042103861090b565b3461014d5761099261097e61014961093736610152565b61095661094b6100d19593953684886106c3565b6100e13684886106c3565b9061097861096c6103eb846100fc36868b6106c3565b926103d53684896106c3565b94610f8c565b6040519384936040855260408501906101e4565b9083820360208501526101e4565b6102389136916106c3565b60405190610120820182811067ffffffffffffffff8211176106845760405260606101008360008152826020820152600060408201526000838201528260808201528260a0820152600060c08201528260e08201520152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805115610a405760200190565b610a04565b805160011015610a405760210190565b908151811015610a40570160200190565b15610a6d57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c69642053475820657874656e73696f6e00000000000000000000006044820152fd5b7f200000000000000000000000000000000000000000000000000000000000000080610b0369ffffffffffffffffffff851684610a55565b511603610b23576102389160501c69ffffffffffffffffffff16906116be565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e6f74206120636f6e73747275637465642074797065000000000000000000006044820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9060018201809211610bbe57565b610b81565b9060028201809211610bbe57565b91908201809211610bbe57565b9069ffffffffffffffffffff9060a01c1660018101809111610bbe57610238916116be565b610400906106046105f96105ee610238966100e13688876106c3565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211610bbe57565b6020039060208211610bbe57565b91908203918211610bbe57565b9069ffffffffffffffffffff8082169160a01c16906001820191828111610bbe57816001910301918211610bbe576102389261183c565b9069ffffffffffffffffffff808260501c169160a01c16906001820191828111610bbe57816001910301918211610bbe576102389261183c565b80516020039060208211610bbe577f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82168203610bbe57602081519101519060208110610d29575b509060031b1c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1638610d20565b610d9690610400610d746102389496956100e13689866106c3565b91610d9b610d96610d8a856100fc368c876106c3565b94610400368b866106c3565b611a5c565b9636916106c3565b610ed8610ed2610ecc610eb394610ec7610ec2610eb3610dda610e8098610dd2610ede9c6100fc3689856106c3565b9536916106c3565b9884610e407f03000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000610e3869ffffffffffffffffffff8f9a168a610a55565b511614611ea0565b610ead7fff00000000000000000000000000000000000000000000000000000000000000610ea669ffffffffffffffffffff8460501c169c8d809a610a55565b517fff000000000000000000000000000000000000000000000000000000000000001690565b16156117e6565b60a01c90565b69ffffffffffffffffffff1690565b610bb0565b610c5a565b92610bb0565b91610c1f565b9161183c565b6041815103610ef05761023890611f05565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636f6d70726573736564207075626c6963206b6579206e6f7420737570706f7260448201527f74656400000000000000000000000000000000000000000000000000000000006064820152608490fd5b90610f88602092828151948592016101c1565b0190565b69ffffffffffffffffffff610fa23684846106c3565b93610ff47f03000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000610e3885851689610a55565b60501c169160018301809311610bbe576110556110446110759261040061102e6110236102389860209a6116be565b6100e136858a6106c3565b95610604611049611044896104003688876106c3565b611fae565b976100fc3686856106c3565b60405194859361106e82860191828151948592016101c1565b0190610f75565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610643565b604051906110b0604083610643565b600982527f2a864886f84d010d0100000000000000000000000000000000000000000000006020830152565b604051906060820182811067ffffffffffffffff8211176106845760405260006040838281528260208201520152565b6040519061111b604083610643565b600a82527f2a864886f84d010d0102000000000000000000000000000000000000000000006020830152565b60405190611156604083610643565b600a82527f2a864886f84d010d0103000000000000000000000000000000000000000000006020830152565b60405190611191604083610643565b600a82527f2a864886f84d010d0104000000000000000000000000000000000000000000006020830152565b90929192600093600093606093849385938160a0925b6111de575b50505050565b6111e88185610acb565b7f060000000000000000000000000000000000000000000000000000000000000061124a611225610e8069ffffffffffffffffffff851689610a55565b7fff000000000000000000000000000000000000000000000000000000000000001690565b036114b95761126a61125c8287610c9e565b6112646110a1565b9061204c565b6112b3575061127f610eb360ff851683901c81565b61128f610eb360ff861685901c81565b11156112a95761129f9084610bde565b91825b90926111d3565b50600091826112a2565b90506112d29298969499506112cc915083979593610bde565b866120e0565b6112dc8187610acb565b6112f7610eb3610eb38a6112ee6110dc565b959060ff161c90565b905b82511515806114ac575b8061149f575b611491576113178189610acb565b7f0600000000000000000000000000000000000000000000000000000000000000611354611225610e8069ffffffffffffffffffff85168d610a55565b0361147d5761136e611366828b610c9e565b61126461110c565b61145a575b611388611380828b610c9e565b611264611147565b611438575b6113a261139a828b610c9e565b611264611182565b611417575b50816113b9610eb360ff8c1684901c81565b10156113ce576113c99088610bde565b6112f9565b5050919395509193505b805115159081611402575b816113f4575b5094388080806111d8565b6040015115159050386113e9565b90506114116020820151151590565b906113e3565b61142d9195506114279089610bde565b88610c9e565b6001835293386113a7565b935061144d611447858a610bde565b89610c9e565b600160208501529361138d565b9650611478955061146b87896122b0565b9115156040860152979096565b611373565b505050509295919450925060009493929190565b5050919395509193506113d8565b5060408301511515611309565b5060208301511515611303565b506000995050505050565b60ff166020039060ff8211610bbe57565b60ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09116019060ff8211610bbe57565b60031b906107f860f8831692168203610bbe57565b60ff60649116029060ff8216918203610bbe57565b60ff600a9116029060ff8216918203610bbe57565b6102389060007f8000000000000000000000000000000000000000000000000000000000000000611581610e8061157b84610bb0565b85610a55565b166115ed57506115aa6115a4610e806115b09361159e6000610bb0565b90610a55565b60f81c90565b60ff1690565b69ffffffffffffffffffff806115e0610eb36115db6115d2610eb36000610bc3565b95848716610bd1565b610c1f565b1660a01b911660501b1790565b9069ffffffffffffffffffff61165c610eb36115db6115d2610eb38596607f611621610e8061161b8c610bb0565b84610a55565b60f81c168099600182146000146116615750506115aa61164b916116456000610bc3565b90612407565b975b6116576000610bc3565b610bd1565b6115e0565b6002820361168f5750506116826116899161167c6000610bc3565b906123e9565b61ffff1690565b9761164d565b90611689926116a06116a693610bc3565b9061239a565b6116b76116b28b6114c4565b611506565b60ff161c90565b90610238917f80000000000000000000000000000000000000000000000000000000000000006116f3610e8061161b85610bb0565b16611749576115aa6115a4610e8061170e9361159e86610bb0565b9069ffffffffffffffffffff80611739610eb36115db611730610eb387610bc3565b96848816610bd1565b1692169160a01b9160501b171790565b9069ffffffffffffffffffff806117a4610eb36115db611730610eb3607f61177c610e806117768b610bb0565b8c610a55565b60f81c169860018a036117a9576115aa611799916116458b610bc3565b985b61165789610bc3565b611739565b89600281036117c957506116826117c39161167c8b610bc3565b9861179b565b6117da906117c3926116a08c610bc3565b6116b76116b28c6114c4565b1561014d57565b906117f782610689565b6118046040519182610643565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06118328294610689565b0190602036910137565b90828101808211610bbe5782511061014d5760209061185a846117ed565b9392010160208301915b60208110156118be57806118a457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b6115db6118b36118b892610c4c565b612418565b90611896565b90918251815260208101809111610bbe579160208101809111610bbe57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561186457610b81565b61ffff6103e89116029061ffff8216918203610bbe57565b61ffff169061ffff8211610bbe57565b61ffff61076c9116019061ffff8211610bbe57565b61ffff6107d09116019061ffff8211610bbe57565b9061ffff8091169116019061ffff8211610bbe57565b60ff169060ff8211610bbe57565b60ff60019116019060ff8211610bbe57565b60ff60029116019060ff8211610bbe57565b60ff60039116019060ff8211610bbe57565b60ff60049116019060ff8211610bbe57565b60ff60059116019060ff8211610bbe57565b60ff60069116019060ff8211610bbe57565b60ff60079116019060ff8211610bbe57565b60ff60089116019060ff8211610bbe57565b60ff60099116019060ff8211610bbe57565b60ff600a9116019060ff8211610bbe57565b60ff600b9116019060ff8211610bbe57565b9060ff8091169116019060ff8211610bbe57565b600090600091600d825114600014611e4957600560ff611a89611a846115a4610e8087610a33565b6114d5565b161015611e3b57611a9990611949565b611aa283611974565b60ff16611aaf9083610a55565b51611abc9060f81c6114d5565b611ac590611530565b611ace84611982565b60ff16611adb9084610a55565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c611b0a91611a48565b611b13906114d5565b60ff16611b1f9161195e565b91611b2981611994565b60ff16611b369083610a55565b51611b439060f81c6114d5565b611b4c90611530565b611b55826119a6565b60ff16611b629084610a55565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c611b9191611a48565b611b9a906114d5565b611ba3826119b8565b60ff16611bb09084610a55565b51611bbd9060f81c6114d5565b611bc690611530565b611bcf836119ca565b60ff16611bdc9085610a55565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c611c0b91611a48565b611c14906114d5565b611c1d90611974565b90611c27836119dc565b60ff16611c349085610a55565b51611c419060f81c6114d5565b611c4a90611530565b611c53846119ee565b60ff16611c609086610a55565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c611c8f91611a48565b611c98906114d5565b611ca190611974565b92611cab81611a00565b60ff16611cb89086610a55565b51611cc59060f81c6114d5565b611cce90611530565b611cd782611a12565b60ff16611ce49087610a55565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c611d1391611a48565b611d1c906114d5565b611d2590611974565b94611d2f82611a24565b60ff16611d3c9082610a55565b51611d499060f81c6114d5565b611d5290611530565b91611d5c90611a36565b60ff16611d6891610a55565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c611d9791611a48565b611da0906114d5565b611da990611974565b60ff169360ff169260ff169160ff169060ff169461ffff1694610238959362023ab16101907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff50593936201518095969760038210900393610e10603c8487069202990297610301600c60096064850495010661f4ff0201600b1c019061016d8160021c910201010392040201010201010190565b611e4490611934565b611a99565b509050611e97611e92611e6f60ff611e69611a846115a4610e8088610a33565b1661190c565b611e8c6115aa611e87611a846115a4610e8089610a45565b61151b565b9061195e565b611924565b90600291611a99565b15611ea757565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f7420747970652042495420535452494e47000000000000000000000000006044820152fd5b90815160408114600014611f165750565b6040811015611f7657611f2960406117ed565b92816040039060408211610bbe5760005b838110611f475750505050565b80611f57610e8060019385610a55565b611f6f611f648387610bd1565b9160001a9189610a55565b5301611f3a565b90917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08201918211610bbe576102389160409161183c565b90815160208114600014611fbf5750565b602081101561201457611fd260206117ed565b92816020039060208211610bbe5760005b838110611ff05750505050565b80612000610e8060019385610a55565b61200d611f648387610bd1565b5301611fe3565b90917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201918211610bbe576102389160209161183c565b9081518151036120d95760005b82518110156120d1577fff0000000000000000000000000000000000000000000000000000000000000061208d8285610a55565b51167fff000000000000000000000000000000000000000000000000000000000000006120ba8385610a55565b5116036120c957600101612059565b505050600090565b505050600190565b5050600090565b7f04000000000000000000000000000000000000000000000000000000000000007fff0000000000000000000000000000000000000000000000000000000000000061213869ffffffffffffffffffff851684610a55565b511603612158576102389160501c69ffffffffffffffffffff16906116be565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f742074797065204f4354455420535452494e4700000000000000000000006044820152fd5b60405161022091906121c88382610643565b60108152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001366020840137565b90602082519201517fffff0000000000000000000000000000000000000000000000000000000000008116926002811061222f575050565b7fffff000000000000000000000000000000000000000000000000000000000000929350829060020360031b1b161690565b60405190612270604083610643565b600b82527f2a864886f84d010d0102110000000000000000000000000000000000000000006020830152565b8051821015610a405760209160051b010190565b6122c56122bf60009383610bde565b82610acb565b6122cd6121b6565b9160006011915b8282106122e45750505050600192565b909192946122f28683610acb565b9061234661233e61230c6123068587610bde565b86610c9e565b60028151106000146123885761232d612327612336926121f7565b60f01c90565b60081c60ff1690565b935b85610c9e565b611264612261565b15612363575061235a600191965b83610bde565b939201906122d4565b9561235a9061238360ff6001941661237b878a61229c565b9060ff169052565b612354565b612327612394916121f7565b93612338565b91906020821161014d57818101808211610bbe5783511061014d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209283036101000a0119920101511690565b60028201808311610bbe5781511061014d57016002015161ffff1690565b9061241191610a55565b5160f81c90565b601f8111610bbe576101000a9056fea2646970667358221220b8d0c21fefd760d75bd44a4aa43db84e1da5567ed88bdc2f971297035b544c1164736f6c634300081b0033", + "nonce": "0x2", "chainId": "0x1555e3" }, "additionalContracts": [], @@ -22,31 +22,31 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x20a2c3", + "cumulativeGasUsed": "0x1ff3ca", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0xf5e5d656505c1a542380bc0235873676aa99b321759da37567f35b57eede638d", + "transactionHash": "0x82edd7879a3fb6398f58a351caf0ac3e20e83ef628a1334f7cafc5b27721eba5", "transactionIndex": "0x1", - "blockHash": "0xf144eb37521e816f492cc6b2f6c5664fc845a07d85c55613ba8f0c6a9830f02e", - "blockNumber": "0x114d79", - "gasUsed": "0x1fd68d", - "effectiveGasPrice": "0xfd", - "from": "0x3d089c2f2cb86d4efde153c81cabd4579784430b", + "blockHash": "0x8ecd2f74e643c06989a91a3a758ca236f318a7f44bcba4d3446ff2801fb68ee0", + "blockNumber": "0x63a0ec", + "gasUsed": "0x1f4888", + "effectiveGasPrice": "0x2dc9b4", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", "to": null, - "contractAddress": "0x5213c0e3ab478dbc83e8afff8909717332e4f8e1", + "contractAddress": "0x4aca9c0eb063401c9f5c2fc4487dbc5ccf1c9e2b", "l1BaseFeeScalar": "0x558", - "l1BlobBaseFee": "0x17621c94", + "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xc5fc5", - "l1Fee": "0x1adf3082d6c", - "l1GasPrice": "0xd3be3a86", - "l1GasUsed": "0x12386" + "l1Fee": "0x39f749a99", + "l1GasPrice": "0x95dd26f", + "l1GasUsed": "0x11abd" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1721133782, + "timestamp": 1731924431, "chain": 1398243, - "commit": "25f9970" + "commit": "1cc539f" } \ No newline at end of file diff --git a/broadcast/DeployHelpers.s.sol/1398243/deployX509CrlHelper-latest.json b/broadcast/DeployHelpers.s.sol/1398243/deployX509CrlHelper-latest.json index 6f7da88..013b1a7 100644 --- a/broadcast/DeployHelpers.s.sol/1398243/deployX509CrlHelper-latest.json +++ b/broadcast/DeployHelpers.s.sol/1398243/deployX509CrlHelper-latest.json @@ -1,18 +1,18 @@ { "transactions": [ { - "hash": "0xf39d8368e32add9bd2e8c1ac8275ae4dd0c94681f2b2a00d002de75ecd38787d", + "hash": "0x31a0e474a59b10cd172cf74c2be50913c96668339e978b98a100a69c4fb0a66c", "transactionType": "CREATE", "contractName": "X509CRLHelper", - "contractAddress": "0x12c1e13aa2a238eab15c2e2b6ac670266bc3c814", + "contractAddress": "0x6e204feae40f668a06e78a83b66185ffc8892dda", "function": null, "arguments": null, "transaction": { - "from": "0x3d089c2f2cb86d4efde153c81cabd4579784430b", - "gas": "0x2195c8", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", + "gas": "0x2138c9", "value": "0x0", - "input": "0x6080806040523461001657611dd4908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806301cd975b14610077578063634fdad514610072578063a91105ce1461006d578063b29b51cb14610068578063cedb9781146100635763fcf0be241461005e57600080fd5b6106a6565b6105ea565b61043c565b6103e7565b610365565b346101b1576101ad61019c61008b366101e4565b91906100956107f0565b9261019661018b6100c26100b26100ad368688610874565b6112ae565b6100bd368688610874565b610959565b61017b6101746101696101496101206101158a8d6101036100fe8d6100f96100ef8d6100bd36858a610874565b9586923691610874565b610aa6565b6108ab565b9052610110368c8e610874565b610ae0565b610110368b8d610874565b610139610132826100bd368d8f610874565b8a8c610b05565b60208d0152610110368a8c610874565b61015481898b610b2c565b60608d015260408c015261011036898b610874565b61011036888a610874565b8587610d41565b6080880152610110368587610874565b610110368486610874565b916110ab565b60a082015260405191829182610297565b0390f35b600080fd5b9181601f840112156101b15782359167ffffffffffffffff83116101b157602083818601950101116101b157565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101b1576004359067ffffffffffffffff82116101b15761022d916004016101b6565b9091565b60005b8381106102445750506000910152565b8181015183820152602001610234565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361029081518092818752878088019101610231565b0116010190565b91906020928381528151848201526102be8483015160e06040840152610100830190610254565b9060408301516060820152606083015160808201526080830151947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe092838382030160a084015281808851928381520197019160005b828110610351575050505060e060c061033e61034e969760a0870151868683030184870152610254565b9401519282850301910152610254565b90565b835189529781019792810192600101610314565b346101b1576101ad6103d3610379366101e4565b6103cd6103c26103b76103ac6103a16103966100ad36888a610874565b6100bd36888a610874565b6100bd368789610874565b610110368688610874565b610110368587610874565b6100bd368486610874565b91610b05565b604051918291602083526020830190610254565b346101b157602061041d6103fa366101e4565b61041761018b6103b76103ac6103a16103966100ad36888a610874565b91610b2c565b9042119081610432575b506040519015158152f35b9050421038610427565b346101b15760206105456105406100f9610455366101e4565b919061053861052d61052261046b368786610874565b7f80000000000000000000000000000000000000000000000000000000000000006104be61049883610928565b517fff000000000000000000000000000000000000000000000000000000000000001690565b1661054d576104db6104d56104986104e193610928565b60f81c90565b60ff1690565b6105066104f76104f2600293610a50565b610a6b565b69ffffffffffffffffffff1690565b69ffffffffffffffffffff80911691169060a01b9060501b1790565b6100bd368786610874565b6100bd368685610874565b923691610874565b6111e5565b604051908152f35b6105a36104f76104f26105906104f7607f61056a61049888610928565b60f81c1695600187036105a85761058361058a91610938565b5160f81c90565b95610a50565b9369ffffffffffffffffffff8516610a5e565b610506565b86600281036105c557506105be61058a91611d53565b61ffff1690565b6105d29061058a92611cb4565b6105e36105de8961122d565b61126f565b60ff161c90565b346101b15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b15760043560243567ffffffffffffffff81116101b1578161064061068a9236906004016101b6565b61068461018b6103b76103ac61067961016961066e6106636100ad368a8c610874565b6100bd368a8c610874565b6100bd36898b610874565b610110368789610874565b91610f6a565b908151156106a15760209182015160405191148152f35b6108ec565b346101b1576106b4366101e4565b906106d16106c66100ad368585610874565b6100bd368585610874565b916106e461018b84610110368587610874565b926106f0368385610874565b9369ffffffffffffffffffff8083169260a01c1692600184019384811161075a5783600191030193841161075a576107326101ad946107389461074c98611556565b946110ab565b604051938493604085526040850190610254565b908382036020850152610254565b610a05565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff8211176107aa57604052565b61075f565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176107aa57604052565b6040519060e0820182811067ffffffffffffffff8211176107aa57604052606060c08360008152826020820152600060408201526000838201528260808201528260a08201520152565b67ffffffffffffffff81116107aa57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926108808261083a565b9161088e60405193846107af565b8294818452818301116101b1578281602093846000960137010152565b6020815191015190602081106108bf575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051156106a15760200190565b8051600110156106a15760210190565b8051600210156106a15760220190565b9081518110156106a1570160200190565b69ffffffffffffffffffff7f20000000000000000000000000000000000000000000000000000000000000008061099285841685610948565b5116036109a75761034e9260501c16906112df565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e6f74206120636f6e73747275637465642074797065000000000000000000006044820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161075a57565b906002820180921161075a57565b600201908160021161075a57565b9190820180921161075a57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161075a57565b602003906020821161075a57565b9069ffffffffffffffffffff808260501c169160a01c1690600182019182811161075a5781600191030191821161075a5761034e92611556565b9069ffffffffffffffffffff9060a01c166001810180911161075a5761034e916112df565b6100f990610538610b2161052261034e966100bd368887610874565b610110368685610874565b61034e9193926100f9610b5a92610b5f610b5a610b4e85610110368c87610874565b946100f9368b86610874565b611732565b963691610874565b908210156106a1570190565b90610b8660209282815194859201610231565b0190565b6020929190610ba0849282815194859201610231565b019081520190565b67ffffffffffffffff81116107aa5760051b60200190565b60405190610bcd8261078e565b6001825260203681840137565b90610be482610ba8565b610bf160405191826107af565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610c1f8294610ba8565b0190602036910137565b60209081818403126101b15780519067ffffffffffffffff82116101b157019180601f840112156101b1578251610c5f81610ba8565b93610c6d60405195866107af565b818552838086019260051b8201019283116101b1578301905b828210610c94575050505090565b81518152908301908301610c86565b60405190610cb08261078e565b600382527f551d1400000000000000000000000000000000000000000000000000000000006020830152565b15610ce357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c69642043524c0000000000000000000000000000000000000000006044820152fd5b60609392610d54816100bd368686610874565b9069ffffffffffffffffffff907fa0000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000610dd9610db38587168989610b67565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1603610e13575050610e11926100f9610e0c93610538610dfe946100bd368685610874565b610e06610ca3565b90611b75565b610cdc565b565b90949192955060605b60a086858185841c16921c1611610ea557610e9f90610e93610e54610540610e49886100bd368c8f610874565b6100f9368b8e610874565b91610e6760405193849260208401610b8a565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826107af565b9361011036878a610874565b92610e1c565b93505093505061034e91506020610f48610f5f610ec3845160051c90565b610f5a6040519586610edb8782019060208083019252565b0390610f0d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928381018a52896107af565b610f4e60405191610f3583610f29888c83019190602083019252565b038581018552846107af565b604051978893610f488b8601809d610b73565b90610b73565b039081018552846107af565b610bda565b508051010190610c29565b9091939293606094610f81826100bd368787610874565b9169ffffffffffffffffffff907fa0000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000610fe0610db38588168a8a610b67565b160361100657505050610e11926100f9610e0c93610538610dfe946100bd368685610874565b9192909593965060605b60a087838186841c16921c161161108c5761105192919061103c610540610e49846100bd368c8f610874565b938491610e6760405193849260208401610b8a565b92841461106e576110679061011036888b610874565b9091611010565b505050925092505061107e610bc0565b906110888261091b565b5290565b9450505050925061034e91506020610f48610f5f610ec3845160051c90565b6110b6368383610874565b69ffffffffffffffffffff937f03000000000000000000000000000000000000000000000000000000000000007fff0000000000000000000000000000000000000000000000000000000000000061111087841685610948565b5116036111875761116661034e946100f9611150611145610e679661113f610f489b6111779860501c16610a34565b906112df565b6100bd36858a610874565b9561053861116b611166896100f9368887610874565b611bed565b97610110368685610874565b6040519485936020850190610b73565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f7420747970652042495420535452494e47000000000000000000000000006044820152fd5b8051602003906020821161075a577f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216820361075a57611225906108ab565b9060031b1c90565b60ff166020039060ff821161075a57565b60ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09116019060ff821161075a57565b60031b906107f860f883169216820361075a57565b60ff60649116029060ff821691820361075a57565b60ff600a9116029060ff821691820361075a57565b61034e907f80000000000000000000000000000000000000000000000000000000000000006104be61049883610928565b9061034e917f800000000000000000000000000000000000000000000000000000000000000061131a61049861131485610a34565b84610948565b16611381576104db6104d561049861133b9361133586610a34565b90610948565b906113646104f76104f26113516104f785610a42565b9469ffffffffffffffffffff8616610a5e565b69ffffffffffffffffffff80911692169160a01b9160501b171790565b906113db6104f76104f26113516104f7607f6113a86104986113a289610a34565b8a610948565b60f81c1696600188036113e0576104db6113cb916113c589610a42565b90611d85565b965b6113d687610a42565b610a5e565b611364565b876002810361140657506105be611400916113fa89610a42565b90611d67565b966113cd565b61141d90611400926114178a610a42565b90611d04565b6105e36105de8a61122d565b604051906114368261078e565b60208083523683820137565b9061144c8261083a565b61145960405191826107af565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610c1f829461083a565b60209081830180841161075a578151106101b157816114a4611429565b938192010190828401925b808210156115095750806114ef57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b6104f26114fe61150392610a98565b611d8f565b906114e1565b9091928351815281810180911161075a579281810180911161075a57917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811161075a57906114af565b91909181830180841161075a578151106101b157602061157583611442565b9381939201019060208401925b808210156115985750806114ef57509192915050565b9091928351815281810180911161075a579281810180911161075a57917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811161075a5790611582565b906103e861ffff8093160291821691820361075a57565b9061ffff80921691821161075a57565b9061076c61ffff8093160191821161075a57565b906107d061ffff8093160191821161075a57565b91909161ffff8080941691160191821161075a57565b60ff169060ff821161075a57565b60ff60019116019060ff821161075a57565b60ff60029116019060ff821161075a57565b60ff60039116019060ff821161075a57565b60ff60049116019060ff821161075a57565b60ff60059116019060ff821161075a57565b60ff60069116019060ff821161075a57565b60ff60079116019060ff821161075a57565b60ff60089116019060ff821161075a57565b60ff60099116019060ff821161075a57565b60ff600a9116019060ff821161075a57565b60ff600b9116019060ff821161075a57565b9060ff8091169116019060ff821161075a57565b60009081600d825114600014611b1e57600560ff61175d6117586104d56104988761091b565b61123e565b161015611b105761176d90611620565b6117768361164a565b60ff166117839083610948565b516117909060f81c61123e565b61179990611299565b6117a284611658565b60ff166117af9084610948565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c6117de9161171e565b6117e79061123e565b60ff166117f391611634565b916117fd8161166a565b60ff1661180a9083610948565b516118179060f81c61123e565b61182090611299565b6118298261167c565b60ff166118369084610948565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c6118659161171e565b61186e9061123e565b6118778261168e565b60ff166118849084610948565b516118919060f81c61123e565b61189a90611299565b6118a3836116a0565b60ff166118b09085610948565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c6118df9161171e565b6118e89061123e565b6118f19061164a565b906118fb836116b2565b60ff166119089085610948565b516119159060f81c61123e565b61191e90611299565b611927846116c4565b60ff166119349086610948565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c6119639161171e565b61196c9061123e565b6119759061164a565b9261197f816116d6565b60ff1661198c9086610948565b516119999060f81c61123e565b6119a290611299565b6119ab826116e8565b60ff166119b89087610948565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c6119e79161171e565b6119f09061123e565b6119f99061164a565b94611a03826116fa565b60ff16611a109082610948565b51611a1d9060f81c61123e565b611a2690611299565b91611a309061170c565b60ff16611a3c91610948565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c611a6b9161171e565b611a749061123e565b611a7d9061164a565b60ff169360ff169260ff169160ff169060ff169461ffff169461034e959062023ab1620151809394957ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff50593936003841090039261019091610e10603c8487069202990297610301600c60096064850495010661f4ff0201600b1c019061016d8160021c910201010392040201010201010190565b611b199061160c565b61176d565b509050611b6c611b67611b4460ff611b3e6117586104d56104988861091b565b166115e5565b611b616104db611b5c6117586104d561049889610928565b611284565b90611634565b6115fc565b9060029161176d565b908151815103611be65760009060005b8351811015611bdd577fff0000000000000000000000000000000000000000000000000000000000000080611bba8387610948565b511690611bc78385610948565b511603611bd657600101611b85565b5050905090565b50505050600190565b5050600090565b90815160208114600014611bfe5750565b6020811015611c7e57611c0f611429565b92816020036020811161075a5760009160005b848110611c30575050505050565b807fff00000000000000000000000000000000000000000000000000000000000000611c5e60019385610948565b5116611c77611c6d8387610a5e565b91871a918a610948565b5301611c22565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0819392930190811161075a5761034e91611487565b90602081116101b157806002018060021161075a578251106101b1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6022916020036101000a01199101511690565b9190602082116101b15781810180821161075a578351106101b1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209283036101000a0119920101511690565b80516004116101b1576004015161ffff1690565b6002820180831161075a578151106101b157016002015161ffff1690565b9061058391610948565b601f811161075a576101000a9056fea2646970667358221220488521981275a0d7434c9368059a0cef6bb7478a3b8cd1a15521f4159365e78064736f6c63430008180033", - "nonce": "0x12c", + "input": "0x60808060405234601557611d7e908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806301cd975b14610077578063634fdad514610072578063a91105ce1461006d578063b29b51cb14610068578063cedb9781146100635763fcf0be241461005e57600080fd5b610593565b6104d7565b61047d565b610428565b6103a6565b346101b1576101ad61019c61008b366101e4565b91906100956106c1565b9261019661018b6100c26100b26100ad368688610745565b61120e565b6100bd368688610745565b61081a565b61017b6101746101696101496101206101158a8d6101036100fe8d6100f96100ef8d6100bd36858a610745565b9586923691610745565b610963565b61077c565b9052610110368c8e610745565b61099d565b610110368b8d610745565b610139610132826100bd368d8f610745565b8a8c6109c2565b60208d0152610110368a8c610745565b61015481898b6109e9565b60608d015260408c015261011036898b610745565b61011036888a610745565b8587610c26565b6080880152610110368587610745565b610110368486610745565b91611002565b60a082015260405191829182610297565b0390f35b600080fd5b9181601f840112156101b15782359167ffffffffffffffff83116101b157602083818601950101116101b157565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101b1576004359067ffffffffffffffff82116101b15761022d916004016101b6565b9091565b60005b8381106102445750506000910152565b8181015183820152602001610234565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361029081518092818752878088019101610231565b0116010190565b919060208352805160208401526102be602082015160e06040860152610100850190610254565b9260408201516060820152606082015160808201526080820151937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08282030160a08301526020808651928381520195019060005b8181106103905750505060c061035a61038d949560a08501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08583030184860152610254565b9201519060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082850301910152610254565b90565b8251875260209687019690920191600101610313565b346101b1576101ad6104146103ba366101e4565b61040e6104036103f86103ed6103e26103d76100ad36888a610745565b6100bd36888a610745565b6100bd368789610745565b610110368688610745565b610110368587610745565b6100bd368486610745565b916109c2565b604051918291602083526020830190610254565b346101b157602061045e61043b366101e4565b61045861018b6103f86103ed6103e26103d76100ad36888a610745565b916109e9565b9042119081610473575b506040519015158152f35b9050421038610468565b346101b15760206104cf6104ca6100f9610496366101e4565b91906104c26104b76104ac6100ad368786610745565b6100bd368786610745565b6100bd368685610745565b923691610745565b611145565b604051908152f35b346101b15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b15760043560243567ffffffffffffffff81116101b1578161052d6105779236906004016101b6565b61057161018b6103f86103ed61056661016961055b6105506100ad368a8c610745565b6100bd368a8c610745565b6100bd36898b610745565b610110368789610745565b91610e8d565b9081511561058e5760209182015160405191148152f35b6107bd565b346101b1576105a1366101e4565b906105be6105b36100ad368585610745565b6100bd368585610745565b916105d161018b84610110368587610745565b926105dd368385610745565b9369ffffffffffffffffffff8083169260a01c16926001840193848111610647578360019103019384116106475761061f6101ad94610625946106399861151a565b94611002565b604051938493604085526040850190610254565b908382036020850152610254565b6108d0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106bc57604052565b61064c565b6040519060e0820182811067ffffffffffffffff8211176106bc57604052606060c08360008152826020820152600060408201526000838201528260808201528260a08201520152565b67ffffffffffffffff81116106bc57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926107518261070b565b9161075f604051938461067b565b8294818452818301116101b1578281602093846000960137010152565b602081519101519060208110610790575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80511561058e5760200190565b80516001101561058e5760210190565b90815181101561058e570160200190565b7f20000000000000000000000000000000000000000000000000000000000000008061085269ffffffffffffffffffff851684610809565b5116036108725761038d9160501c69ffffffffffffffffffff16906113ad565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e6f74206120636f6e73747275637465642074797065000000000000000000006044820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161064757565b906002820180921161064757565b9190820180921161064757565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161064757565b602003906020821161064757565b9069ffffffffffffffffffff808260501c169160a01c16906001820191828111610647578160019103019182116106475761038d9261151a565b9069ffffffffffffffffffff9060a01c16600181018091116106475761038d916113ad565b6100f9906104c26109de6104ac61038d966100bd368887610745565b610110368685610745565b61038d9193926100f9610a1792610a1c610a17610a0b85610110368c87610745565b946100f9368b86610745565b61173a565b963691610745565b9082101561058e570190565b90610a4360209282815194859201610231565b0190565b6020929190610a5d849282815194859201610231565b019081520190565b67ffffffffffffffff81116106bc5760051b60200190565b60408051909190610a8e838261067b565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001366020840137565b90610ac782610a65565b610ad4604051918261067b565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610b028294610a65565b0190602036910137565b6020818303126101b15780519067ffffffffffffffff82116101b157019080601f830112156101b1578151610b4081610a65565b92610b4e604051948561067b565b81845260208085019260051b8201019283116101b157602001905b828210610b765750505090565b8151815260209182019101610b69565b60405190610b9560408361067b565b600382527f551d1400000000000000000000000000000000000000000000000000000000006020830152565b15610bc857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c69642043524c0000000000000000000000000000000000000000006044820152fd5b60609392610c39816100bd368686610745565b907fa0000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000610ccf610ca9610ca269ffffffffffffffffffff87165b69ffffffffffffffffffff1690565b8888610a24565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1603610d085750610d06926100f9610d01936104c2610cf3946100bd368685610745565b610cfb610b86565b90611b7e565b610bc1565b565b91945060a093909160605b610d23610c9360ff881686901c81565b610d33610c9360ff891685901c81565b10610db757610c93610c93610dad610d3393610da1610d626104ca8b6100f98f6104c28e6100bd368685610745565b91610d7560405193849260208401610a47565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261067b565b96610110368a8d610745565b9592505050610d13565b93505093505061038d91506020610e77610e82610dd5845160051c90565b610e7d60405195610e1c87610df08882019060208083019252565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810189528861067b565b610e3860405191610e6483610e38878b83019190602083019252565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810185528461067b565b604051968793610e778a8601809c610a30565b90610a30565b610abd565b508051010190610b0c565b9091939293606094610ea4826100bd368787610745565b917fa0000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000610f09610ca9610f0269ffffffffffffffffffff8816610c93565b8989610a24565b1603610f2e575050610d06926100f9610d01936104c2610cf3946100bd368685610745565b92955060a09492909160605b610f4a610c9360ff891684901c81565b610f5a610c9360ff8a1686901c81565b10610fe357610f9a929190610f856104ca610f7a846100bd368c8f610745565b6100f9368b8e610745565b938491610d7560405193849260208401610a47565b928414610fc557610c93610c93610fba610f5a936101108c8b3691610745565b939492505050610f3a565b5050509250925050610fd5610a7d565b90610fdf826107ec565b5290565b9450505050925061038d91506020610e77610e82610dd5845160051c90565b61100d368383610745565b917f03000000000000000000000000000000000000000000000000000000000000007fff0000000000000000000000000000000000000000000000000000000000000061106669ffffffffffffffffffff871686610809565b5116036110e7576110d76110c6610d75926100f96110b06110a561038d9861109f61109a610c93610c93610e779e60501c90565b6108ff565b906113ad565b6100bd36858a610745565b956104c26110cb6110c6896100f9368887610745565b611c12565b97610110368685610745565b6040519485936020850190610a30565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f7420747970652042495420535452494e47000000000000000000000000006044820152fd5b80516020039060208211610647577f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82168203610647576111859061077c565b9060031b1c90565b60ff166020039060ff821161064757565b60ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09116019060ff821161064757565b60031b906107f860f883169216820361064757565b60ff60649116029060ff821691820361064757565b60ff600a9116029060ff821691820361064757565b61038d9060007f800000000000000000000000000000000000000000000000000000000000000061127061124a611244846108ff565b85610809565b517fff000000000000000000000000000000000000000000000000000000000000001690565b166112dc575061129961129361124a61129f9361128d60006108ff565b90610809565b60f81c90565b60ff1690565b69ffffffffffffffffffff806112cf610c936112ca6112c1610c93600061090d565b9584871661091b565b610928565b1660a01b911660501b1790565b9069ffffffffffffffffffff61134b610c936112ca6112c1610c938596607f61131061124a61130a8c6108ff565b84610809565b60f81c1680996001821460001461135057505061129961133a91611334600061090d565b90611d28565b975b611346600061090d565b61091b565b6112cf565b6002820361137e5750506113716113789161136b600061090d565b90611d0a565b61ffff1690565b9761133c565b906113789261138f6113959361090d565b90611cbb565b6113a66113a18b61118d565b6111cf565b60ff161c90565b9061038d917f80000000000000000000000000000000000000000000000000000000000000006113e261124a61130a856108ff565b166114385761129961129361124a6113fd9361128d866108ff565b9069ffffffffffffffffffff80611428610c936112ca61141f610c938761090d565b9684881661091b565b1692169160a01b9160501b171790565b9069ffffffffffffffffffff80611493610c936112ca61141f610c93607f61146b61124a6114658b6108ff565b8c610809565b60f81c169860018a0361149857611299611488916113348b61090d565b985b6113468961090d565b611428565b89600281036114b857506113716114b29161136b8b61090d565b9861148a565b6114c9906114b29261138f8c61090d565b6113a66113a18c61118d565b906114df8261070b565b6114ec604051918261067b565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610b02829461070b565b90828101808211610647578251106101b157602090611538846114d5565b9392010160208301915b602081101561159c578061158257507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b6112ca61159161159692610955565b611d39565b90611574565b9091825181526020810180911161064757916020810180911161064757907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115611542576108d0565b61ffff6103e89116029061ffff821691820361064757565b61ffff169061ffff821161064757565b61ffff61076c9116019061ffff821161064757565b61ffff6107d09116019061ffff821161064757565b9061ffff8091169116019061ffff821161064757565b60ff169060ff821161064757565b60ff60019116019060ff821161064757565b60ff60029116019060ff821161064757565b60ff60039116019060ff821161064757565b60ff60049116019060ff821161064757565b60ff60059116019060ff821161064757565b60ff60069116019060ff821161064757565b60ff60079116019060ff821161064757565b60ff60089116019060ff821161064757565b60ff60099116019060ff821161064757565b60ff600a9116019060ff821161064757565b60ff600b9116019060ff821161064757565b9060ff8091169116019060ff821161064757565b600090600091600d825114600014611b2757600560ff61176761176261129361124a876107ec565b61119e565b161015611b195761177790611627565b61178083611652565b60ff1661178d9083610809565b5161179a9060f81c61119e565b6117a3906111f9565b6117ac84611660565b60ff166117b99084610809565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c6117e891611726565b6117f19061119e565b60ff166117fd9161163c565b9161180781611672565b60ff166118149083610809565b516118219060f81c61119e565b61182a906111f9565b61183382611684565b60ff166118409084610809565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c61186f91611726565b6118789061119e565b61188182611696565b60ff1661188e9084610809565b5161189b9060f81c61119e565b6118a4906111f9565b6118ad836116a8565b60ff166118ba9085610809565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c6118e991611726565b6118f29061119e565b6118fb90611652565b90611905836116ba565b60ff166119129085610809565b5161191f9060f81c61119e565b611928906111f9565b611931846116cc565b60ff1661193e9086610809565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c61196d91611726565b6119769061119e565b61197f90611652565b92611989816116de565b60ff166119969086610809565b516119a39060f81c61119e565b6119ac906111f9565b6119b5826116f0565b60ff166119c29087610809565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c6119f191611726565b6119fa9061119e565b611a0390611652565b94611a0d82611702565b60ff16611a1a9082610809565b51611a279060f81c61119e565b611a30906111f9565b91611a3a90611714565b60ff16611a4691610809565b517fff000000000000000000000000000000000000000000000000000000000000001660f81c611a7591611726565b611a7e9061119e565b611a8790611652565b60ff169360ff169260ff169160ff169060ff169461ffff169461038d959362023ab16101907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff50593936201518095969760038210900393610e10603c8487069202990297610301600c60096064850495010661f4ff0201600b1c019061016d8160021c910201010392040201010201010190565b611b2290611612565b611777565b509050611b75611b70611b4d60ff611b4761176261129361124a886107ec565b166115ea565b611b6a611299611b6561176261129361124a896107f9565b6111e4565b9061163c565b611602565b90600291611777565b908151815103611c0b5760005b8251811015611c03577fff00000000000000000000000000000000000000000000000000000000000000611bbf8285610809565b51167fff00000000000000000000000000000000000000000000000000000000000000611bec8385610809565b511603611bfb57600101611b8b565b505050600090565b505050600190565b5050600090565b90815160208114600014611c235750565b6020811015611c8357611c3660206114d5565b928160200390602082116106475760005b838110611c545750505050565b80611c6461124a60019385610809565b611c7c611c71838761091b565b9160001a9189610809565b5301611c47565b90917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082019182116106475761038d9160209161151a565b9190602082116101b157818101808211610647578351106101b1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209283036101000a0119920101511690565b60028201808311610647578151106101b157016002015161ffff1690565b90611d3291610809565b5160f81c90565b601f8111610647576101000a9056fea26469706673582212202c481cdee31f3bf70b676e239e61a8298217aaf10145a289f56c086bc4080dd164736f6c634300081b0033", + "nonce": "0x3", "chainId": "0x1555e3" }, "additionalContracts": [], @@ -22,31 +22,31 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x1aaeb4", + "cumulativeGasUsed": "0x1a3b4d", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0xf39d8368e32add9bd2e8c1ac8275ae4dd0c94681f2b2a00d002de75ecd38787d", + "transactionHash": "0x31a0e474a59b10cd172cf74c2be50913c96668339e978b98a100a69c4fb0a66c", "transactionIndex": "0x1", - "blockHash": "0xcfe4e09a387c3d1be36b0d332ba2937633ad7cb0d64ddcd15e7d18f415986521", - "blockNumber": "0x114d97", - "gasUsed": "0x19d78e", + "blockHash": "0xaccaf9d7cd3a7b1f9e117874ac1ef1c8f889f7c4301f9f10f35301d6fdeb1344", + "blockNumber": "0x63a104", + "gasUsed": "0x198fff", "effectiveGasPrice": "0xfd", - "from": "0x3d089c2f2cb86d4efde153c81cabd4579784430b", + "from": "0x7e212e611826122dc69098fbe0f4057b823751f1", "to": null, - "contractAddress": "0x12c1e13aa2a238eab15c2e2b6ac670266bc3c814", + "contractAddress": "0x6e204feae40f668a06e78a83b66185ffc8892dda", "l1BaseFeeScalar": "0x558", - "l1BlobBaseFee": "0x133727f1", + "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xc5fc5", - "l1Fee": "0x12981236b6b", - "l1GasPrice": "0xcbad7457", - "l1GasUsed": "0xed84" + "l1Fee": "0x383e3fddd", + "l1GasPrice": "0xaf879eb", + "l1GasUsed": "0xea39" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1721133842, + "timestamp": 1731924479, "chain": 1398243, - "commit": "25f9970" + "commit": "1cc539f" } \ No newline at end of file diff --git a/env/.testnet.env.example b/env/.testnet.env.example new file mode 100644 index 0000000..4d97419 --- /dev/null +++ b/env/.testnet.env.example @@ -0,0 +1,19 @@ +# ATA Testnet + +# Deployment Configuration +RPC_URL="https://1rpc.io/ata/testnet" +PRIVATE_KEY=0x +VERIFIER_URL="https://explorer-testnet.ata.network/api?" + +# Helper Deployment +ENCLAVE_IDENTITY_HELPER=0xae27D762EED6958bc34b358bd7C78c7211fe77F8 +FMSPC_TCB_HELPER=0x71056B540b4E60D0E8eFb55FAd487C486B09FFF5 +X509_HELPER=0x4Aca9C0EB063401C9F5c2Fc4487DBC5ccF1C9E2B +X509_CRL_HELPER=0x6e204fEAe40F668a06E78a83b66185FFC8892DDA + +# PCCS Deployment +PCCS_STORAGE=0x2bBc0Ccc218E63Ad4D2bbb7bdE1375B092FD38a2 +ENCLAVE_ID_DAO=0x45f91C0d9Cf651785d93fcF7e9E97dE952CdB910 +FMSPC_TCB_DAO=0x9c54C72867b07caF2e6255CE32983c28aFE40F26 +PCK_DAO=0x722525B96b62e182F8A095af0a79d4EA2037795C +PCS_DAO=0xcf171ACd6c0a776f9d3E1F6Cac8067c982Ac6Ce1 \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 4a3943c..dff6d40 100644 --- a/foundry.toml +++ b/foundry.toml @@ -4,6 +4,7 @@ out = "out" libs = ["lib"] fs_permissions = [{ access = "read", path = "./"}] +ffi = true solc = "0.8.27" optimizer = true diff --git a/script/automata/ConfigAutomataDao.s.sol b/script/automata/ConfigAutomataDao.s.sol index 0e91223..3b06e38 100644 --- a/script/automata/ConfigAutomataDao.s.sol +++ b/script/automata/ConfigAutomataDao.s.sol @@ -9,10 +9,6 @@ import {AutomataEnclaveIdentityDao} from "../../src/automata_pccs/AutomataEnclav import {AutomataPcsDao} from "../../src/automata_pccs/AutomataPcsDao.sol"; import {AutomataPckDao} from "../../src/automata_pccs/AutomataPckDao.sol"; -interface IUpdatePcs { - function setPcs(address _pcs) external; -} - contract ConfigAutomataDao is Script { uint256 privateKey = vm.envUint("PRIVATE_KEY"); @@ -40,31 +36,9 @@ contract ConfigAutomataDao is Script { AutomataDaoStorage(pccsStorageAddr).revokeDao(dao); } - function updatePcsDaoDependencies() public { - AutomataPcsDao pcsDao = AutomataPcsDao(pcsDaoAddr); + function setAuthorizedCaller(address caller, bool authorized) public { vm.broadcast(privateKey); - pcsDao.updateDeps( - x509, - x509Crl - ); - } - - function updatePckDaoDependencies() public { - AutomataPckDao pckDao = AutomataPckDao(pckDaoAddr); - vm.broadcast(privateKey); - pckDao.updateDeps( - pcsDaoAddr, - x509, - x509Crl - ); - } - - function updatePcsDependencies() public { - address[2] memory daos = [fmspcTcbDaoAddr, enclaveIdDaoAddr]; - for (uint256 i = 0; i < 2; i++) { - vm.broadcast(privateKey); - IUpdatePcs(daos[i]).setPcs(pcsDaoAddr); - } + AutomataDaoStorage(pccsStorageAddr).setCallerAuthorization(caller, authorized); } } diff --git a/script/automata/DeployAutomataDao.s.sol b/script/automata/DeployAutomataDao.s.sol index e82489f..6401e24 100644 --- a/script/automata/DeployAutomataDao.s.sol +++ b/script/automata/DeployAutomataDao.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; -import "forge-std/Script.sol"; +import "../utils/P256Configuration.sol"; import {AutomataDaoStorage} from "../../src/automata_pccs/shared/AutomataDaoStorage.sol"; import {AutomataFmspcTcbDao} from "../../src/automata_pccs/AutomataFmspcTcbDao.sol"; @@ -9,7 +9,7 @@ import {AutomataEnclaveIdentityDao} from "../../src/automata_pccs/AutomataEnclav import {AutomataPcsDao} from "../../src/automata_pccs/AutomataPcsDao.sol"; import {AutomataPckDao} from "../../src/automata_pccs/AutomataPckDao.sol"; -contract DeployAutomataDao is Script { +contract DeployAutomataDao is P256Configuration { uint256 privateKey = vm.envUint("PRIVATE_KEY"); address x509Crl = vm.envAddress("X509_CRL_HELPER"); @@ -17,9 +17,13 @@ contract DeployAutomataDao is Script { address enclaveIdentityHelper = vm.envAddress("ENCLAVE_IDENTITY_HELPER"); address fmspcTcbHelper = vm.envAddress("FMSPC_TCB_HELPER"); - function deployAll(bool shouldDeployStorage) public { - vm.startBroadcast(privateKey); + modifier broadcastKey(uint256 key) { + vm.startBroadcast(key); + _; + vm.stopBroadcast(); + } + function deployAll(bool shouldDeployStorage) public broadcastKey(privateKey) { AutomataDaoStorage pccsStorage; if (shouldDeployStorage) { pccsStorage = new AutomataDaoStorage(); @@ -30,81 +34,68 @@ contract DeployAutomataDao is Script { } // Deploy PcsDao - AutomataPcsDao pcsDao = new AutomataPcsDao(address(pccsStorage), x509, x509Crl); + AutomataPcsDao pcsDao = new AutomataPcsDao(address(pccsStorage), simulateVerify(), x509, x509Crl); console.log("AutomataPcsDao deployed at: ", address(pcsDao)); // Deploy PckDao - AutomataPckDao pckDao = new AutomataPckDao(address(pccsStorage), address(pcsDao), x509, x509Crl); + AutomataPckDao pckDao = + new AutomataPckDao(address(pccsStorage), simulateVerify(), address(pcsDao), x509, x509Crl); console.log("AutomataPckDao deployed at: ", address(pckDao)); // Deploy EnclaveIdDao - AutomataEnclaveIdentityDao enclaveIdDao = - new AutomataEnclaveIdentityDao(address(pccsStorage), address(pcsDao), enclaveIdentityHelper, x509); + AutomataEnclaveIdentityDao enclaveIdDao = new AutomataEnclaveIdentityDao( + address(pccsStorage), simulateVerify(), address(pcsDao), enclaveIdentityHelper, x509 + ); console.log("AutomataEnclaveIdDao deployed at: ", address(enclaveIdDao)); // Deploy FmspcDao AutomataFmspcTcbDao fmspcTcbDao = - new AutomataFmspcTcbDao(address(pccsStorage), address(pcsDao), fmspcTcbHelper, x509); + new AutomataFmspcTcbDao(address(pccsStorage), simulateVerify(), address(pcsDao), fmspcTcbHelper, x509); console.log("AutomataFmspcTcbDao deployed at: ", address(fmspcTcbDao)); - pccsStorage.updateDao( - address(pcsDao), - address(pckDao), - address(fmspcTcbDao), - address(enclaveIdDao) - ); - - vm.stopBroadcast(); + pccsStorage.updateDao(address(pcsDao), address(pckDao), address(fmspcTcbDao), address(enclaveIdDao)); } - function deployStorage() public { - vm.broadcast(privateKey); - + function deployStorage() public broadcastKey(privateKey) { AutomataDaoStorage pccsStorage = new AutomataDaoStorage(); console.log("AutomataDaoStorage deployed at ", address(pccsStorage)); } - function deployPcs() public { + function deployPcs() public broadcastKey(privateKey) { address pccsStorageAddr = vm.envAddress("PCCS_STORAGE"); - vm.broadcast(privateKey); - - AutomataPcsDao pcsDao = new AutomataPcsDao(pccsStorageAddr, x509, x509Crl); + AutomataPcsDao pcsDao = new AutomataPcsDao(pccsStorageAddr, simulateVerify(), x509, x509Crl); console.log("AutomataPcsDao deployed at: ", address(pcsDao)); } - function deployPck() public { + function deployPck() public broadcastKey(privateKey) { address pccsStorageAddr = vm.envAddress("PCCS_STORAGE"); address pcsDaoAddr = vm.envAddress("PCS_DAO"); - vm.broadcast(privateKey); + AutomataPckDao pckDao = new AutomataPckDao(pccsStorageAddr, simulateVerify(), pcsDaoAddr, x509, x509Crl); - AutomataPckDao pckDao = new AutomataPckDao(pccsStorageAddr, pcsDaoAddr, x509, x509Crl); console.log("AutomataPckDao deployed at: ", address(pckDao)); } - function deployEnclaveIdDao() public { + function deployEnclaveIdDao() public broadcastKey(privateKey) { address pccsStorageAddr = vm.envAddress("PCCS_STORAGE"); address pcsDaoAddr = vm.envAddress("PCS_DAO"); - vm.broadcast(privateKey); - AutomataEnclaveIdentityDao enclaveIdDao = - new AutomataEnclaveIdentityDao(pccsStorageAddr, pcsDaoAddr, enclaveIdentityHelper, x509); + new AutomataEnclaveIdentityDao(pccsStorageAddr, simulateVerify(), pcsDaoAddr, enclaveIdentityHelper, x509); console.log("AutomataEnclaveIdDao deployed at: ", address(enclaveIdDao)); } - function deployFmspcTcbDao() public { + function deployFmspcTcbDao() public broadcastKey(privateKey) { address pccsStorageAddr = vm.envAddress("PCCS_STORAGE"); address pcsDaoAddr = vm.envAddress("PCS_DAO"); - vm.broadcast(privateKey); - - AutomataFmspcTcbDao fmspcTcbDao = new AutomataFmspcTcbDao(pccsStorageAddr, pcsDaoAddr, fmspcTcbHelper, x509); + AutomataFmspcTcbDao fmspcTcbDao = + new AutomataFmspcTcbDao(pccsStorageAddr, simulateVerify(), pcsDaoAddr, fmspcTcbHelper, x509); console.log("AutomataFmspcTcbDao deployed at: ", address(fmspcTcbDao)); } diff --git a/script/utils/P256Configuration.sol b/script/utils/P256Configuration.sol new file mode 100644 index 0000000..5701f9a --- /dev/null +++ b/script/utils/P256Configuration.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: UNLICENSED + +import "../../src/utils/BytesUtils.sol"; +import "forge-std/Script.sol"; + +pragma solidity ^0.8.0; + +contract P256Configuration is Script { + using BytesUtils for bytes; + + address constant RIP7212_P256_PRECOMPILE = 0x0000000000000000000000000000000000000100; + address constant DAIMO_P256 = 0xc2b78104907F722DABAc4C69f826a522B2754De4; + + bytes constant test_pubkey = + hex"710f9d7cb59f86798aaf92138320831b778016d02cf0f5b416a76917f85edd4d7440615935921eaaa33c66c6cf4b745e70176a391610ab14f845d7ff39b112a3"; + bytes constant test_sig = + hex"8c6a3bb0346ec08d01b6351eeff099fd7131de48e5e569dbcd9dc3f29e08995692db2eaebd633a52fff4915d274859bbc241967c6ce3a6831e754b88066fc534"; + bytes constant test_message = hex"a9b4ac5fb82203536c408b1db1d0338c61fd0064ea2471794d435fc0e03c217f"; + + function run() public virtual { + simulateVerify(); + } + + function simulateVerify() public returns (address verifier) { + bytes memory data = abi.encodePacked(sha256(test_message), test_sig, test_pubkey); + + bool precompileVerified = verifyWithFfi(RIP7212_P256_PRECOMPILE, data); + + if (precompileVerified) { + console.log("P256Verifier address: ", RIP7212_P256_PRECOMPILE); + verifier = RIP7212_P256_PRECOMPILE; + } else { + bool daimoVerified = verifyWithFfi(DAIMO_P256, data); + if (daimoVerified) { + console.log("P256Verifier address: ", DAIMO_P256); + verifier = DAIMO_P256; + } else { + revert("Failed to locate a verifier."); + } + } + } + + function verifyWithFfi(address verifier, bytes memory data) private returns (bool) { + string[] memory inputs = new string[](6); + inputs[0] = "cast"; + inputs[1] = "call"; + inputs[2] = vm.toString(verifier); + inputs[3] = vm.toString(data); + inputs[4] = "--rpc-url"; + inputs[5] = vm.envString("RPC_URL"); + + bytes memory ret = vm.ffi(inputs); + + if (ret.length == 0) { + return false; + } else { + bool out = abi.decode(ret, (bool)); + return out; + } + } +} diff --git a/src/Common.sol b/src/Common.sol index 0a67357..bdf812e 100644 --- a/src/Common.sol +++ b/src/Common.sol @@ -7,35 +7,3 @@ enum CA { PLATFORM, SIGNING } - -/// @notice Attestation Definition is taken from https://github.com/ethereum-attestation-service/eas-contracts/blob/52af661748bde9b40ae782907702f885852bc149/contracts/IEAS.sol#L9C1-L23C2 -/// @notice We opted for EAS Attestation Request Definition to ensure interoperability between Verax and EAS - -struct AttestationRequestData { - address recipient; // The recipient of the attestation. - uint64 expirationTime; // The time when the attestation expires (Unix timestamp). - bool revocable; // Whether the attestation is revocable. - bytes32 refUID; // The UID of the related attestation. - bytes data; // Custom attestation data. - uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors. -} - -struct AttestationRequest { - bytes32 schema; // The unique identifier of the schema. - AttestationRequestData data; // The arguments of the attestation request. -} - -/// @notice A struct representing a single attestation. -/// https://github.com/ethereum-attestation-service/eas-contracts/blob/52af661748bde9b40ae782907702f885852bc149/contracts/Common.sol#L25C1-L37C2 -struct Attestation { - bytes32 uid; // A unique identifier of the attestation. - bytes32 schema; // The unique identifier of the schema. - uint64 time; // The time when the attestation was created (Unix timestamp). - uint64 expirationTime; // The time when the attestation expires (Unix timestamp). - uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp). - bytes32 refUID; // The UID of the related attestation. - address recipient; // The recipient of the attestation. - address attester; // The attester/sender of the attestation. - bool revocable; // Whether the attestation is revocable. - bytes data; // Custom attestation data. -} diff --git a/src/automata_pccs/AutomataEnclaveIdentityDao.sol b/src/automata_pccs/AutomataEnclaveIdentityDao.sol index ff98296..2150c43 100644 --- a/src/automata_pccs/AutomataEnclaveIdentityDao.sol +++ b/src/automata_pccs/AutomataEnclaveIdentityDao.sol @@ -1,37 +1,20 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import {EnclaveIdentityDao, PcsDao, DaoBase} from "../bases/EnclaveIdentityDao.sol"; import {AutomataDaoBase} from "./shared/AutomataDaoBase.sol"; -import {EnclaveIdentityDao, AttestationRequest, PcsDao} from "../bases/EnclaveIdentityDao.sol"; -import {Ownable} from "solady/auth/Ownable.sol"; +contract AutomataEnclaveIdentityDao is AutomataDaoBase, EnclaveIdentityDao { + constructor(address _storage, address _p256, address _pcs, address _enclaveIdentityHelper, address _x509Helper) + EnclaveIdentityDao(_storage, _p256, _pcs, _enclaveIdentityHelper, _x509Helper) + {} -contract AutomataEnclaveIdentityDao is Ownable, AutomataDaoBase, EnclaveIdentityDao { - constructor(address _storage, address _pcs, address _enclaveIdentityHelper, address _x509Helper) - EnclaveIdentityDao(_pcs, _enclaveIdentityHelper, _x509Helper) - AutomataDaoBase(_storage) - { - _initializeOwner(msg.sender); - } - - function setPcs(address _pcs) external onlyOwner { - Pcs = PcsDao(_pcs); - } - - function enclaveIdentitySchemaID() public pure override returns (bytes32) { - // NOT-APPLICABLE FOR OUR USE CASE - // but this is required by most attestation services, such as EAS, Verax etc - return bytes32(0); - } - - function _attestEnclaveIdentity(AttestationRequest memory req, bytes32 hash) + function _onFetchDataFromResolver(bytes32 key, bool hash) internal - override - returns (bytes32 attestationId) + view + override(AutomataDaoBase, DaoBase) + returns (bytes memory data) { - // delete the predecessor if replacing - _deletePredecessor(req.data.refUID); - _attestCollateral(hash, req.data.data); - attestationId = hash; + data = super._onFetchDataFromResolver(key, hash); } } diff --git a/src/automata_pccs/AutomataFmspcTcbDao.sol b/src/automata_pccs/AutomataFmspcTcbDao.sol index b715378..b63b729 100644 --- a/src/automata_pccs/AutomataFmspcTcbDao.sol +++ b/src/automata_pccs/AutomataFmspcTcbDao.sol @@ -1,43 +1,20 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import {FmspcTcbDao, PcsDao, DaoBase} from "../bases/FmspcTcbDao.sol"; import {AutomataDaoBase} from "./shared/AutomataDaoBase.sol"; -import {FmspcTcbDao, AttestationRequest, PcsDao} from "../bases/FmspcTcbDao.sol"; -import {Ownable} from "solady/auth/Ownable.sol"; +contract AutomataFmspcTcbDao is AutomataDaoBase, FmspcTcbDao { + constructor(address _storage, address _p256, address _pcs, address _fmspcHelper, address _x509Helper) + FmspcTcbDao(_storage, _p256, _pcs, _fmspcHelper, _x509Helper) + {} -contract AutomataFmspcTcbDao is Ownable, AutomataDaoBase, FmspcTcbDao { - constructor(address _storage, address _pcs, address _fmspcHelper, address _x509Helper) - AutomataDaoBase(_storage) - FmspcTcbDao(_pcs, _fmspcHelper, _x509Helper) - { - _initializeOwner(msg.sender); - } - - function setPcs(address _pcs) external onlyOwner { - Pcs = PcsDao(_pcs); - } - - function fmpscTcbV2SchemaID() public pure override returns (bytes32) { - // NOT-APPLICABLE FOR OUR USE CASE - // but this is required by most attestation services, such as EAS, Verax etc - return bytes32(0); - } - - function fmpscTcbV3SchemaID() public pure override returns (bytes32) { - // NOT-APPLICABLE FOR OUR USE CASE - // but this is required by most attestation services, such as EAS, Verax etc - return bytes32(0); - } - - function _attestTcb(AttestationRequest memory req, bytes32 hash) + function _onFetchDataFromResolver(bytes32 key, bool hash) internal - override - returns (bytes32 attestationId) + view + override(AutomataDaoBase, DaoBase) + returns (bytes memory data) { - // delete the predecessor if replacing - _deletePredecessor(req.data.refUID); - _attestCollateral(hash, req.data.data); - attestationId = hash; + data = super._onFetchDataFromResolver(key, hash); } } diff --git a/src/automata_pccs/AutomataPckDao.sol b/src/automata_pccs/AutomataPckDao.sol index 265cb69..76029c9 100644 --- a/src/automata_pccs/AutomataPckDao.sol +++ b/src/automata_pccs/AutomataPckDao.sol @@ -1,54 +1,42 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import {PckDao, PcsDao, X509CRLHelper, DaoBase} from "../bases/PckDao.sol"; +import {AutomataDaoStorage} from "./shared/AutomataDaoStorage.sol"; import {AutomataDaoBase} from "./shared/AutomataDaoBase.sol"; -import {PckDao, AttestationRequest, PcsDao, X509CRLHelper} from "../bases/PckDao.sol"; -import {Ownable} from "solady/auth/Ownable.sol"; +contract AutomataPckDao is AutomataDaoBase, PckDao { + constructor(address _storage, address _p256, address _pcs, address _x509, address _crl) + PckDao(_storage, _p256, _pcs, _x509, _crl) + {} -contract AutomataPckDao is Ownable, AutomataDaoBase, PckDao { - constructor(address _storage, address _pcs, address _x509, address _crl) - AutomataDaoBase(_storage) - PckDao(_pcs, _x509, _crl) + function _onFetchDataFromResolver(bytes32 key, bool hash) + internal + view + override(AutomataDaoBase, DaoBase) + returns (bytes memory data) { - _initializeOwner(msg.sender); - } - - function updateDeps(address _pcs, address _x509, address _crl) external onlyOwner { - Pcs = PcsDao(_pcs); - x509 = _x509; - crlLib = X509CRLHelper(_crl); + data = super._onFetchDataFromResolver(key, hash); } - function pckSchemaID() public pure override returns (bytes32) { - // NOT-APPLICABLE FOR OUR USE CASE - // but this is required by most attestation services, such as EAS, Verax etc - return bytes32(0); + function _upsertTcbm(bytes16 qeid, bytes2 pceid, bytes18 tcbm) internal override { + AutomataDaoStorage(address(resolver)).setTcbm(qeid, pceid, tcbm); } - function tcbmSchemaID() public pure override returns (bytes32) { - // NOT-APPLICABLE FOR OUR USE CASE - // but this is required by most attestation services, such as EAS, Verax etc - return bytes32(0); - } - - function _attestPck(AttestationRequest memory req, bytes32 hash) + function _getAllTcbs(bytes16 qeidBytes, bytes2 pceidBytes) internal + view override - returns (bytes32 attestationId) + returns (bytes18[] memory tcbms) { - // delete the predecessor if replacing - _deletePredecessor(req.data.refUID); - _attestCollateral(hash, req.data.data); - attestationId = hash; + tcbms = AutomataDaoStorage(address(resolver)).printTcbmSet(qeidBytes, pceidBytes); } - function _attestTcbm(AttestationRequest memory req) internal override returns (bytes32 attestationId) { - // delete the predecessor if replacing - _deletePredecessor(req.data.refUID); + function _setTcbrToTcbmMapping(bytes32 tcbMappingKey, bytes18 tcbmBytes) internal override { + AutomataDaoStorage(address(resolver)).setTcbrMapping(tcbMappingKey, tcbmBytes); + } - bytes32 hash = keccak256(req.data.data); - _attestCollateral(hash, req.data.data); - attestationId = hash; + function _tcbrToTcbmMapping(bytes32 tcbMappingKey) internal view override returns (bytes18 tcbm) { + tcbm = AutomataDaoStorage(address(resolver)).getTcbm(tcbMappingKey); } } diff --git a/src/automata_pccs/AutomataPcsDao.sol b/src/automata_pccs/AutomataPcsDao.sol index c30a9be..abf7225 100644 --- a/src/automata_pccs/AutomataPcsDao.sol +++ b/src/automata_pccs/AutomataPcsDao.sol @@ -1,41 +1,18 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import {PcsDao, X509CRLHelper, DaoBase} from "../bases/PcsDao.sol"; import {AutomataDaoBase} from "./shared/AutomataDaoBase.sol"; -import {PcsDao, AttestationRequest, X509CRLHelper} from "../bases/PcsDao.sol"; -import {Ownable} from "solady/auth/Ownable.sol"; +contract AutomataPcsDao is AutomataDaoBase, PcsDao { + constructor(address _storage, address _p256, address _x509, address _crl) PcsDao(_storage, _p256, _x509, _crl) {} -contract AutomataPcsDao is AutomataDaoBase, PcsDao, Ownable { - constructor(address _storage, address _x509, address _crl) AutomataDaoBase(_storage) PcsDao(_x509, _crl) { - _initializeOwner(msg.sender); - } - - function updateDeps(address _x509, address _crl) external onlyOwner { - x509 = _x509; - crlLib = X509CRLHelper(_crl); - } - - function pcsCertSchemaID() public pure override returns (bytes32) { - // NOT-APPLICABLE FOR OUR USE CASE - // but this is required by most attestation services, such as EAS, Verax etc - return bytes32(0); - } - - function pcsCrlSchemaID() public pure override returns (bytes32) { - // NOT-APPLICABLE FOR OUR USE CASE - // but this is required by most attestation services, such as EAS, Verax etc - return bytes32(0); - } - - function _attestPcs(AttestationRequest memory req, bytes32 hash) + function _onFetchDataFromResolver(bytes32 key, bool hash) internal - override - returns (bytes32 attestationId) + view + override(AutomataDaoBase, DaoBase) + returns (bytes memory data) { - // delete the predecessor if replacing - _deletePredecessor(req.data.refUID); - _attestCollateral(hash, req.data.data); - attestationId = hash; + data = super._onFetchDataFromResolver(key, hash); } } diff --git a/src/automata_pccs/shared/AutomataDaoBase.sol b/src/automata_pccs/shared/AutomataDaoBase.sol index 1b782cb..5ad4c95 100644 --- a/src/automata_pccs/shared/AutomataDaoBase.sol +++ b/src/automata_pccs/shared/AutomataDaoBase.sol @@ -1,43 +1,33 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import {AutomataDaoStorage} from "./AutomataDaoStorage.sol"; import {DaoBase} from "../../bases/DaoBase.sol"; -import {CA} from "../../Common.sol"; - -interface IAutomataDaoStorage { - function writeToPccs(bytes32 attId, bytes memory attData) external; - - function readPccs(bytes32 attId) external view returns (bytes memory attData); - - function deleteData(bytes32 attId) external; -} abstract contract AutomataDaoBase is DaoBase { - IAutomataDaoStorage pccsStorage; - - constructor(address _storage) { - pccsStorage = IAutomataDaoStorage(_storage); - } - - function getAttestedData(bytes32 attestationId) public view override returns (bytes memory attestationData) { - attestationData = pccsStorage.readPccs(attestationId); - } - - /// @dev we simply map the collateral hash to the data itself in our use case - /// @dev however, this may not be the case when the dao integrates an attestation service, such as EAS - /// @dev it is recommended to store the hash of the collateral as a separate attestation from the collateral - /// to reduce the size of data read - function getCollateralHash(bytes32 attestationId) public pure override returns (bytes32) { - return attestationId; - } - - function _attestCollateral(bytes32 collateralHash, bytes memory data) internal { - pccsStorage.writeToPccs(collateralHash, data); + + /** + * @notice overridden the default method to check caller authorization + * this is added as a temporary measure to only allow read operations from + * the PCCSRouter contract (Learn more about PCCSRouter at + * https://github.com/automata-network/automata-dcap-attestation/blob/DEV-3373/audit/contracts/PCCSRouter.sol) + * + * @notice this restriction may be removed in the future + */ + function _onFetchDataFromResolver(bytes32 key, bool hash) + internal + view + virtual + override + returns (bytes memory data) + { + if (_callerIsAuthorized()) { + data = super._onFetchDataFromResolver(key, hash); + } } - function _deletePredecessor(bytes32 predecessor) internal { - if (getAttestedData(predecessor).length > 0) { - pccsStorage.deleteData(predecessor); - } + function _callerIsAuthorized() private view returns (bool authorized) { + AutomataDaoStorage automataStorage = AutomataDaoStorage(address(resolver)); + authorized = automataStorage.paused() || automataStorage.isAuthorizedCaller(msg.sender); } } diff --git a/src/automata_pccs/shared/AutomataDaoStorage.sol b/src/automata_pccs/shared/AutomataDaoStorage.sol index 2987592..9099258 100644 --- a/src/automata_pccs/shared/AutomataDaoStorage.sol +++ b/src/automata_pccs/shared/AutomataDaoStorage.sol @@ -1,20 +1,48 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import "solady/auth/Ownable.sol"; +import {IDaoAttestationResolver} from "../../interfaces/IDaoAttestationResolver.sol"; +import {AutomataTCBManager, EnumerableSet} from "./AutomataTCBManager.sol"; -contract AutomataDaoStorage is Ownable { - mapping(address => bool) _authorized; +import {Ownable} from "solady/auth/Ownable.sol"; +import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol"; - mapping(bytes32 attId => bytes attData) _pccsData; +/** + * @title Automata PCCS Dao Storage + * @notice This contract resolves and stores all collateral data internally + */ - modifier onlyAuthorized(address dao) { - require(_authorized[dao], "Unauthorized caller"); +contract AutomataDaoStorage is AutomataTCBManager, IDaoAttestationResolver, Pausable, Ownable { + mapping(address => bool) _authorized_writers; + mapping(address => bool) _authorized_readers; + mapping(bytes32 attId => bytes collateral) _db; + + modifier onlyDao(address dao) { + require(_authorized_writers[dao], "FORBIDDEN"); _; } constructor() { _initializeOwner(msg.sender); + + // adding address(0) as an authorized_reader to allow eth_call + _authorized_readers[address(0)] = true; + } + + function isAuthorizedCaller(address caller) external view returns (bool) { + return _authorized_readers[caller]; + } + + function setCallerAuthorization(address caller, bool authorized) external onlyOwner { + _authorized_readers[caller] = authorized; + } + + function pauseCallerRestriction() external onlyOwner whenNotPaused { + _pause(); + } + + function unpauseCallerRestriction() external onlyOwner whenPaused { + _unpause(); } function updateDao(address _pcsDao, address _pckDao, address _fmspcTcbDao, address _enclaveIdDao) @@ -25,25 +53,95 @@ contract AutomataDaoStorage is Ownable { } function revokeDao(address revoked) external onlyOwner { - _authorized[revoked] = false; + _authorized_writers[revoked] = false; } - function writeToPccs(bytes32 attId, bytes memory attData) external onlyAuthorized(msg.sender) { - _pccsData[attId] = attData; + function collateralPointer(bytes32 key) external pure override returns (bytes32 collateralAttId) { + collateralAttId = _computeAttestationId(key, false); } - function deleteData(bytes32 attId) external onlyAuthorized(msg.sender) { - delete _pccsData[attId]; + function collateralHashPointer(bytes32 key) external pure override returns (bytes32 collateralHashAttId) { + collateralHashAttId = _computeAttestationId(key, true); + } + + function readAttestation(bytes32 attestationId) + external + view + override + onlyDao(msg.sender) + returns (bytes memory attData) + { + attData = _db[attestationId]; } - function readPccs(bytes32 attId) external view returns (bytes memory attData) { - attData = _pccsData[attId]; + /** + * @notice In AutomataDaoStorage, we will simply assign the key as the attestationid of the collateral + */ + function attest(bytes32 key, bytes calldata attData, bytes32 attDataHash) + external + override + onlyDao(msg.sender) + returns (bytes32 attestationId, bytes32 hashAttestationid) + { + attestationId = _computeAttestationId(key, false); + hashAttestationid = _computeAttestationId(key, true); + _db[attestationId] = attData; + _db[hashAttestationid] = abi.encodePacked(attDataHash); } function _updateDao(address _pcsDao, address _pckDao, address _fmspcTcbDao, address _enclaveIdDao) private { - _authorized[_pcsDao] = true; - _authorized[_pckDao] = true; - _authorized[_fmspcTcbDao] = true; - _authorized[_enclaveIdDao] = true; + _authorized_writers[_pcsDao] = true; + _authorized_writers[_pckDao] = true; + _authorized_writers[_fmspcTcbDao] = true; + _authorized_writers[_enclaveIdDao] = true; + } + + /// Attestation ID Computation + bytes4 constant DATA_ATTESTATION_MAGIC = 0x54a09e9a; + bytes4 constant HASH_ATTESTATION_MAGIC = 0x628ab4d2; + + function _computeAttestationId(bytes32 key, bool hash) private pure returns (bytes32 attestationId) { + bytes32 magic = hash ? HASH_ATTESTATION_MAGIC : DATA_ATTESTATION_MAGIC; + attestationId = keccak256(abi.encodePacked(magic, key)); + } + + /// TCB Management + using EnumerableSet for EnumerableSet.Bytes32Set; + + /** + * @notice forms a mapping between (qeid, pceid) to tcbm + * @dev called AFTER the qeid, pceid and tcbm are all validated by the same PCK Certificate + */ + function setTcbm(bytes16 qeid, bytes2 pceid, bytes18 tcbm) external onlyDao(msg.sender) { + bytes32 k = keccak256(abi.encodePacked(qeid, pceid)); + if (!_tcbmSet[k].contains(bytes32(tcbm))) { + _tcbmSet[k].add(bytes32(tcbm)); + } + } + + /** + * @notice prints out a list of tcbms associated with the given qeid and pceid paired values + */ + function printTcbmSet(bytes16 qeid, bytes2 pceid) external view returns (bytes18[] memory set) { + bytes32 k = keccak256(abi.encodePacked(qeid, pceid)); + uint256 n = _tcbmSet[k].length(); + set = new bytes18[](n); + for (uint256 i = 0; i < n;) { + set[i] = bytes18(_tcbmSet[k].at(i)); + unchecked { + i++; + } + } + } + + /** + * @notice forms a mapping of rawTcb to tcbm + */ + function setTcbrMapping(bytes32 rawTcbKey, bytes18 tcbm) external onlyDao(msg.sender) { + _tcbMapping[rawTcbKey] = tcbm; + } + + function getTcbm(bytes32 rawTcbKey) external view onlyDao(msg.sender) returns (bytes18 tcbm) { + tcbm = _tcbMapping[rawTcbKey]; } } diff --git a/src/automata_pccs/shared/AutomataTCBManager.sol b/src/automata_pccs/shared/AutomataTCBManager.sol new file mode 100644 index 0000000..b811a61 --- /dev/null +++ b/src/automata_pccs/shared/AutomataTCBManager.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; + +abstract contract AutomataTCBManager { + /// mapping (keccak256(qeid ++ pceid) => Enumerable tcbm Set) + mapping(bytes32 => EnumerableSet.Bytes32Set) _tcbmSet; + + /// rawTcbKey = keccak256(qeid ++ pceid ++ rawCpuSvns ++ rawPceSvns) + mapping(bytes32 rawTcbKey => bytes18 tcbm) _tcbMapping; +} diff --git a/src/bases/DaoBase.sol b/src/bases/DaoBase.sol index 5c258e3..aa37776 100644 --- a/src/bases/DaoBase.sol +++ b/src/bases/DaoBase.sol @@ -1,25 +1,62 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.8.0; +import "../interfaces/IDaoAttestationResolver.sol"; + +/** + * @title Common Data Access Object base contract + * @notice This contract provides the generic API methods to fetch collateral data + * and its hashes from the Resolver + */ + abstract contract DaoBase { + IDaoAttestationResolver public immutable resolver; + + constructor(address _resolver) { + resolver = IDaoAttestationResolver(_resolver); + } + + /** + * @notice getter logic to retrieve attested data from the Resolver + * @param key - mapped to a collateral as defined by individual data access objects (DAOs) + */ + function getAttestedData(bytes32 key) external view returns (bytes memory attestationData) { + attestationData = _fetchDataFromResolver(key, false); + } + + /** + * @dev SHOULD store the hash of a collateral (e.g. X509 Cert, TCBInfo JSON etc) in the attestation registry + * as a separate attestation from the collateral data itself + */ + function getCollateralHash(bytes32 key) external view returns (bytes32 collateralHash) { + bytes memory attestationData = _fetchDataFromResolver(key, true); + collateralHash = abi.decode(attestationData, (bytes32)); + } + /** - * @dev implement getter logic to retrieve attested data - * @param attestationId maps to the data + * @notice the default internal method to be called directly by the DAO + * @notice ideally this is called to fetch a "signer" collateral such as a Signing + * Certificate to validate a new collateral that is being upserted + * @notice there should NOT be additional logic in place other than reading collaterals */ - function getAttestedData(bytes32 attestationId) public view virtual returns (bytes memory attestationData); + function _fetchDataFromResolver(bytes32 key, bool hash) internal view returns (bytes memory) { + bytes32 attestationId; + if (hash) { + attestationId = resolver.collateralHashPointer(key); + } else { + attestationId = resolver.collateralPointer(key); + } + return resolver.readAttestation(attestationId); + } /** - * @dev must store the hash of a collateral (e.g. X509 Cert, TCBInfo JSON etc) in the attestation registry - * @dev it is recommended to store hash as a separate attestation from the actual collateral - * @dev this getter can be useful for checking the correctness of the queried attested collateral - * - * @dev may link the hash attestation with the attestation of the collateral - * For example, the content of a hash attestation can be a tuple of bytes32 values consisting of: - * (bytes32 collateralHash, bytes32 collateralAttestationId) - * @param attestationId - the attestationId pointing to the hash attestation, or the collateral attestation - * itself, if the hash is included as part of the attestation data, this varies by how you define the schema. + * @notice similar with "_fetchDataFromResolver()" but this is called ONLY + * for collateral reads + * @dev may overwrite this method to implement additional custom business logic */ - function getCollateralHash(bytes32 attestationId) public view virtual returns (bytes32 collateralHash); + function _onFetchDataFromResolver(bytes32 key, bool hash) internal view virtual returns (bytes memory) { + return _fetchDataFromResolver(key, hash); + } /// @dev https://github.com/Vectorized/solady/blob/4964e3e2da1bc86b0394f63a90821f51d60a260b/src/utils/JSONParserLib.sol#L339-L364 /// @dev Parses an unsigned integer from a string (in hexadecimal, i.e. base 16). diff --git a/src/bases/EnclaveIdentityDao.sol b/src/bases/EnclaveIdentityDao.sol index 16e7daf..9f761ec 100644 --- a/src/bases/EnclaveIdentityDao.sol +++ b/src/bases/EnclaveIdentityDao.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {CA, AttestationRequestData, AttestationRequest} from "../Common.sol"; +import {CA} from "../Common.sol"; import { EnclaveIdentityHelper, EnclaveIdentityJsonObj, EnclaveId, IdentityObj } from "../helpers/EnclaveIdentityHelper.sol"; @@ -10,44 +10,56 @@ import {DaoBase} from "./DaoBase.sol"; import {SigVerifyBase} from "./SigVerifyBase.sol"; import {PcsDao} from "./PcsDao.sol"; +/// @notice The on-chain schema for Identity.json is stored as ABI-encoded tuple of (EnclaveIdentityHelper.IdentityObj, string, bytes) +/// @notice see {{ EnclaveIdentityHelper.IdentityObj }} for struct definition + /** * @title Enclave Identity Data Access Object * @notice This contract is heavily inspired by Section 4.2.9 in the Intel SGX PCCS Design Guideline * https://download.01.org/intel-sgx/sgx-dcap/1.19/linux/docs/SGX_DCAP_Caching_Service_Design_Guide.pdf - * @dev should extends this contract and use the provided read/write methods to interact with Enclave - * Identity JSON data published on-chain. + * @dev should extends this contract and use the provided read/write methods to interact with + * Identity.json data published on-chain. */ abstract contract EnclaveIdentityDao is DaoBase, SigVerifyBase { PcsDao public Pcs; EnclaveIdentityHelper public EnclaveIdentityLib; - /// @notice retrieves the attestationId of the attested EnclaveIdentity from the registry - /// key: keccak256(id ++ version) - /// NOTE: the "version" indicated here is taken from the input parameter (e.g. v3 vs v4); - /// NOT the "version" value found in the Enclave Identity JSON - /// - /// @notice the schema of the attested data is the following: - /// An ABI-encoded tuple of (EnclaveIdentityHelper.IdentityObj, string, bytes) - /// see {{ EnclaveIdentityHelper.IdentityObj }} for struct definition - /// - string qeidentityObj - /// - bytes signature - mapping(bytes32 => bytes32) public enclaveIdentityAttestations; + // first 4 bytes of keccak256("ENCLAVE_ID_MAGIC") + bytes4 constant ENCLAVE_ID_MAGIC = 0xff818fce; + // 289fa0cb error Enclave_Id_Mismatch(); + // 4e0f5696 + error Incorrect_Enclave_Id_Version(); + // 8de7233f error Invalid_TCB_Cert_Signature(); + // 9ac04499 error Enclave_Id_Expired(); - constructor(address _pcs, address _enclaveIdentityHelper, address _x509Helper) SigVerifyBase(_x509Helper) { + constructor(address _resolver, address _p256, address _pcs, address _enclaveIdentityHelper, address _x509Helper) + DaoBase(_resolver) + SigVerifyBase(_p256, _x509Helper) + { Pcs = PcsDao(_pcs); EnclaveIdentityLib = EnclaveIdentityHelper(_enclaveIdentityHelper); } + /** + * @notice computes the key that is mapped to the collateral attestation ID + * NOTE: the "version" indicated here is taken from the input parameter (e.g. v3 vs v4); + * NOT the "version" value found in the Enclave Identity JSON + * @return key = keccak256(ENCLAVE_ID_MAGIC ++ id ++ version) + */ + function ENCLAVE_ID_KEY(uint256 id, uint256 version) public pure returns (bytes32 key) { + key = keccak256(abi.encodePacked(ENCLAVE_ID_MAGIC, id, version)); + } + /** * @notice Section 4.2.9 (getEnclaveIdentity) * @notice Gets the enclave identity. * @param id 0: QE; 1: QVE; 2: TD_QE * https://github.com/intel/SGXDataCenterAttestationPrimitives/blob/39989a42bbbb0c968153a47254b6de79a27eb603/QuoteVerification/QVL/Src/AttestationLibrary/src/Verifiers/EnclaveIdentityV2.h#L49-L52 - * @param version the input version parameter + * @param version the input version parameter (v3 or v4) * @return enclaveIdObj See {EnclaveIdentityHelper.sol} to learn more about the structure definition */ function getEnclaveIdentity(uint256 id, uint256 version) @@ -55,25 +67,18 @@ abstract contract EnclaveIdentityDao is DaoBase, SigVerifyBase { view returns (EnclaveIdentityJsonObj memory enclaveIdObj) { - bytes32 attestationId = _getAttestationId(id, version); - if (attestationId != bytes32(0)) { - bytes memory attestedIdentityData = getAttestedData(attestationId); + bytes memory attestedIdentityData = _onFetchDataFromResolver(ENCLAVE_ID_KEY(id, version), false); + if (attestedIdentityData.length > 0) { (, enclaveIdObj.identityStr, enclaveIdObj.signature) = abi.decode(attestedIdentityData, (IdentityObj, string, bytes)); } } - /// @question is there a way we can validate the version input? - /// TEMP: Currently, there is no way to quickly distinguish between QuoteV3 vs QuoteV4 Enclave Identity - /** * @notice Section 4.2.9 (upsertEnclaveIdentity) - * @dev Attestation Registry Entrypoint Contracts, such as Portals on Verax are responsible - * @dev for performing ECDSA verification on the provided Enclave Identity - * against the Signing CA key prior to attestations * @param id 0: QE; 1: QVE; 2: TD_QE * https://github.com/intel/SGXDataCenterAttestationPrimitives/blob/39989a42bbbb0c968153a47254b6de79a27eb603/QuoteVerification/QVL/Src/AttestationLibrary/src/Verifiers/EnclaveIdentityV2.h#L49-L52 - * @param version the input version parameter + * @param version the input version parameter (v3 or v4) * @param enclaveIdentityObj See {EnclaveIdentityHelper.sol} to learn more about the structure definition */ function upsertEnclaveIdentity(uint256 id, uint256 version, EnclaveIdentityJsonObj calldata enclaveIdentityObj) @@ -81,10 +86,10 @@ abstract contract EnclaveIdentityDao is DaoBase, SigVerifyBase { returns (bytes32 attestationId) { _validateQeIdentity(enclaveIdentityObj); - AttestationRequest memory req = _buildEnclaveIdentityAttestationRequest(id, version, enclaveIdentityObj); + bytes32 key = ENCLAVE_ID_KEY(id, version); + bytes memory req = _buildEnclaveIdentityAttestationRequest(id, version, enclaveIdentityObj); bytes32 hash = sha256(bytes(enclaveIdentityObj.identityStr)); - attestationId = _attestEnclaveIdentity(req, hash); - enclaveIdentityAttestations[keccak256(abi.encodePacked(id, version))] = attestationId; + attestationId = _attestEnclaveIdentity(req, hash, key); } /** @@ -92,74 +97,52 @@ abstract contract EnclaveIdentityDao is DaoBase, SigVerifyBase { * @return signingCert - DER encoded Intel TCB Signing Certificate * @return rootCert - DER encoded Intel SGX Root CA */ - function getEnclaveIdentityIssuerChain() public view returns (bytes memory signingCert, bytes memory rootCert) { - bytes32 signingCertAttestationId = Pcs.pcsCertAttestations(CA.SIGNING); - bytes32 rootCertAttestationId = Pcs.pcsCertAttestations(CA.ROOT); - signingCert = getAttestedData(signingCertAttestationId); - rootCert = getAttestedData(rootCertAttestationId); + function getEnclaveIdentityIssuerChain() external view returns (bytes memory signingCert, bytes memory rootCert) { + signingCert = _onFetchDataFromResolver(Pcs.PCS_KEY(CA.SIGNING, false), false); + rootCert = _onFetchDataFromResolver(Pcs.PCS_KEY(CA.ROOT, false), false); } /** - * @dev overwrite this method to define the schemaID for the attestation of Enclave Identities - */ - function enclaveIdentitySchemaID() public view virtual returns (bytes32 ENCLAVE_IDENTITY_SCHEMA_ID); - - /** - * @dev implement logic to validate and attest the enclave identity - * @param req structure as defined by EAS - * https://github.com/ethereum-attestation-service/eas-contracts/blob/52af661748bde9b40ae782907702f885852bc149/contracts/IEAS.sol#L9C1-L23C2 + * @notice attests collateral via the Resolver * @return attestationId */ - function _attestEnclaveIdentity(AttestationRequest memory req, bytes32 hash) + function _attestEnclaveIdentity(bytes memory reqData, bytes32 hash, bytes32 key) internal virtual - returns (bytes32 attestationId); - - /** - * @notice computes the key that maps to the corresponding attestation ID - */ - function _getAttestationId(uint256 id, uint256 version) private view returns (bytes32 attestationId) { - attestationId = enclaveIdentityAttestations[keccak256(abi.encodePacked(id, version))]; + returns (bytes32 attestationId) + { + (attestationId,) = resolver.attest(key, reqData, hash); } /** - * @notice builds an EAS compliant attestation request + * @notice constructs the Identity.json attestation data */ function _buildEnclaveIdentityAttestationRequest( uint256 id, uint256 version, EnclaveIdentityJsonObj calldata enclaveIdentityObj - ) private view returns (AttestationRequest memory req) { - bytes32 predecessorAttestationId = _getAttestationId(id, version); + ) private view returns (bytes memory reqData) { IdentityObj memory identity = EnclaveIdentityLib.parseIdentityString(enclaveIdentityObj.identityStr); if (id != uint256(identity.id)) { revert Enclave_Id_Mismatch(); } + if (id == uint256(EnclaveId.TD_QE) && version != 4) { + revert Incorrect_Enclave_Id_Version(); + } + if (block.timestamp < identity.issueDateTimestamp || block.timestamp > identity.nextUpdateTimestamp) { revert Enclave_Id_Expired(); } - bytes memory attestationData = - abi.encode(identity, enclaveIdentityObj.identityStr, enclaveIdentityObj.signature); - AttestationRequestData memory reqData = AttestationRequestData({ - recipient: msg.sender, - expirationTime: uint64(identity.nextUpdateTimestamp), - revocable: true, - refUID: predecessorAttestationId, - data: attestationData, - value: 0 - }); - req = AttestationRequest({schema: enclaveIdentitySchemaID(), data: reqData}); + reqData = abi.encode(identity, enclaveIdentityObj.identityStr, enclaveIdentityObj.signature); } /** - * @notice validates QEIdentity is signed by Intel TCB Signing Cert + * @notice validates IdentityString is signed by Intel TCB Signing Cert */ function _validateQeIdentity(EnclaveIdentityJsonObj calldata enclaveIdentityObj) private view { - // Get TCB Signing Cert - bytes32 tcbSigningAttestationId = Pcs.pcsCertAttestations(CA.SIGNING); - bytes memory signingDer = getAttestedData(tcbSigningAttestationId); + bytes memory signingDer = _fetchDataFromResolver(Pcs.PCS_KEY(CA.SIGNING, false), false); // Validate signature bool sigVerified = diff --git a/src/bases/FmspcTcbDao.sol b/src/bases/FmspcTcbDao.sol index 658bd78..59599f3 100644 --- a/src/bases/FmspcTcbDao.sol +++ b/src/bases/FmspcTcbDao.sol @@ -5,7 +5,7 @@ import {PcsDao} from "./PcsDao.sol"; import {DaoBase} from "./DaoBase.sol"; import {SigVerifyBase} from "./SigVerifyBase.sol"; -import {CA, AttestationRequestData, AttestationRequest} from "../Common.sol"; +import {CA} from "../Common.sol"; import { FmspcTcbHelper, TcbInfoJsonObj, @@ -16,6 +16,13 @@ import { TDXModuleIdentity } from "../helpers/FmspcTcbHelper.sol"; +/// @notice the on-chain schema of the attested data is dependent on the version of TCBInfo: +/// @notice For TCBInfoV2, it consists of the ABI-encoded tuple of: +/// @notice (TcbInfoBasic, TCBLevelsObj[], string tcbInfo, bytes signature) +/// @notice For TCBInfoV3, it consists of the abi-encoded tuple of: +/// @notice (TcbInfoBasic, TDXModule, TDXModuleIdentity[], TCBLevelsObj, string tcbInfo, bytes signature) +/// @notice See {{ FmspcTcbHelper.sol }} to learn more about FMSPC TCB related struct definitions. + /** * @title FMSPC TCB Data Access Object * @notice This contract is heavily inspired by Section 4.2.3 in the Intel SGX PCCS Design Guidelines @@ -27,41 +34,29 @@ abstract contract FmspcTcbDao is DaoBase, SigVerifyBase { PcsDao public Pcs; FmspcTcbHelper public FmspcTcbLib; - /// @notice retrieves the attestationId of the attested FMSPC TCBInfo from the registry - /// key: keccak256(type ++ FMSPC ++ version) - /// @notice the schema of the attested data is dependent on the version of TCBInfo: - /// For TCBInfoV2, it consists of the ABI-encoded tuple of: - /// (TcbInfoBasic, TCBLevelsObj[], string tcbInfo, bytes signature) - /// For TCBInfoV3, it consists of the abi-encoded tuple of: - /// (TcbInfoBasic, TDXModule, TDXModuleIdentity[], TCBLevelsObj, string tcbInfo, bytes signature) - /// See {{ FmspcTcbHelper.sol }} to learn more about FMSPC TCB related struct definitions. - mapping(bytes32 => bytes32) public fmspcTcbInfoAttestations; - - constructor(address _pcs, address _fmspcHelper, address _x509Helper) SigVerifyBase(_x509Helper) { - Pcs = PcsDao(_pcs); - FmspcTcbLib = FmspcTcbHelper(_fmspcHelper); - } + // first 4 bytes of FMSPC_TCB_MAGIC + bytes4 constant FMSPC_TCB_MAGIC = 0xbb69b29c; + // 8de7233f error Invalid_TCB_Cert_Signature(); + // bae57649 error TCB_Expired(); - /** - * @dev overwrite this method to define the schemaID for the attestation of TCBInfo - */ - function fmpscTcbV2SchemaID() public view virtual returns (bytes32 FMSPC_TCB_V2_SCHEMA_ID); - - /** - * @dev overwrite this method to define the schemaID for the attestation of TCBInfo - */ - function fmpscTcbV3SchemaID() public view virtual returns (bytes32 FMSPC_TCB_V3_SCHEMA_ID); + constructor(address _resolver, address _p256, address _pcs, address _fmspcHelper, address _x509Helper) + SigVerifyBase(_p256, _x509Helper) + DaoBase(_resolver) + { + Pcs = PcsDao(_pcs); + FmspcTcbLib = FmspcTcbHelper(_fmspcHelper); + } /** - * @dev implement logic to validate and attest TCBInfo - * @param req structure as defined by EAS - * https://github.com/ethereum-attestation-service/eas-contracts/blob/52af661748bde9b40ae782907702f885852bc149/contracts/IEAS.sol#L9C1-L23C2 - * @return attestationId + * @notice computes the key that is mapped to the collateral attestation ID + * @return key = keccak256(type ++ FMSPC ++ version) */ - function _attestTcb(AttestationRequest memory req, bytes32 hash) internal virtual returns (bytes32 attestationId); + function FMSPC_TCB_KEY(uint8 tcbType, bytes6 fmspc, uint32 version) public pure returns (bytes32 key) { + key = keccak256(abi.encodePacked(FMSPC_TCB_MAGIC, tcbType, fmspc, version)); + } /** * @notice Section 4.2.3 (getTcbInfo) @@ -79,34 +74,27 @@ abstract contract FmspcTcbDao is DaoBase, SigVerifyBase { returns (TcbInfoJsonObj memory tcbObj) { bytes6 fmspcBytes = bytes6(uint48(_parseUintFromHex(fmspc))); - bytes32 attestationId = _getAttestationId(tcbType, fmspcBytes, version); - if (attestationId != bytes32(0)) { - bytes memory attestedTcbData = getAttestedData(attestationId); - if (version < 3) { - (,, tcbObj.tcbInfoStr, tcbObj.signature) = - abi.decode(attestedTcbData, (TcbInfoBasic, TCBLevelsObj[], string, bytes)); - } else { - (,,,, tcbObj.tcbInfoStr, tcbObj.signature) = abi.decode( - attestedTcbData, (TcbInfoBasic, TDXModule, TDXModuleIdentity[], TCBLevelsObj[], string, bytes) - ); - } + bytes memory attestedTcbData = + _onFetchDataFromResolver(FMSPC_TCB_KEY(uint8(tcbType), fmspcBytes, uint32(version)), false); + if (version < 3) { + (,, tcbObj.tcbInfoStr, tcbObj.signature) = + abi.decode(attestedTcbData, (TcbInfoBasic, TCBLevelsObj[], string, bytes)); + } else { + (,,,, tcbObj.tcbInfoStr, tcbObj.signature) = abi.decode( + attestedTcbData, (TcbInfoBasic, TDXModule, TDXModuleIdentity[], TCBLevelsObj[], string, bytes) + ); } } /** * @notice Section 4.2.9 (upsertEnclaveIdentity) - * @dev Attestation Registry Entrypoint Contracts, such as Portals on Verax are responsible - * @dev for performing ECDSA verification on the provided TCBInfo - * against the Signing CA key prior to attestations * @param tcbInfoObj See {FmspcTcbHelper.sol} to learn more about the structure definition */ function upsertFmspcTcb(TcbInfoJsonObj calldata tcbInfoObj) external returns (bytes32 attestationId) { _validateTcbInfo(tcbInfoObj); - (AttestationRequest memory req, TcbInfoBasic memory tcbInfo) = _buildTcbAttestationRequest(tcbInfoObj); + (bytes memory req, bytes32 key) = _buildTcbAttestationRequest(tcbInfoObj); bytes32 hash = sha256(bytes(tcbInfoObj.tcbInfoStr)); - attestationId = _attestTcb(req, hash); - fmspcTcbInfoAttestations[keccak256(abi.encodePacked(uint8(tcbInfo.id), tcbInfo.fmspc, tcbInfo.version))] = - attestationId; + attestationId = _attestTcb(req, hash, key); } /** @@ -114,50 +102,37 @@ abstract contract FmspcTcbDao is DaoBase, SigVerifyBase { * @return signingCert - DER encoded Intel TCB Signing Certificate * @return rootCert - DER encoded Intel SGX Root CA */ - function getTcbIssuerChain() public view returns (bytes memory signingCert, bytes memory rootCert) { - bytes32 signingCertAttestationId = Pcs.pcsCertAttestations(CA.SIGNING); - bytes32 rootCertAttestationId = Pcs.pcsCertAttestations(CA.ROOT); - signingCert = getAttestedData(signingCertAttestationId); - rootCert = getAttestedData(rootCertAttestationId); + function getTcbIssuerChain() external view returns (bytes memory signingCert, bytes memory rootCert) { + signingCert = _onFetchDataFromResolver(Pcs.PCS_KEY(CA.SIGNING, false), false); + rootCert = _onFetchDataFromResolver(Pcs.PCS_KEY(CA.ROOT, false), false); } /** - * @notice computes the key that maps to the corresponding attestation ID - * @dev once again I am reminding you that the argument tcbType is to indicate the TEE type for the - * particular TCBInfo. i.e. 0: SGX, 1: TDX + * @notice attests collateral via the Resolver + * @return attestationId */ - function _getAttestationId(uint256 tcbType, bytes6 fmspc, uint256 version) - private - view + function _attestTcb(bytes memory reqData, bytes32 hash, bytes32 key) + internal + virtual returns (bytes32 attestationId) { - attestationId = fmspcTcbInfoAttestations[keccak256(abi.encodePacked(uint8(tcbType), fmspc, uint32(version)))]; + (attestationId,) = resolver.attest(key, reqData, hash); } /** - * @notice builds an EAS compliant attestation request + * @notice constructs the TcbInfo.json attestation data */ function _buildTcbAttestationRequest(TcbInfoJsonObj calldata tcbInfoObj) private view - returns (AttestationRequest memory req, TcbInfoBasic memory tcbInfo) + returns (bytes memory reqData, bytes32 key) { - bytes memory attestationData; - (attestationData, tcbInfo) = _buildAttestationData(tcbInfoObj.tcbInfoStr, tcbInfoObj.signature); - bytes32 predecessorAttestationId = _getAttestationId(uint8(tcbInfo.id), tcbInfo.fmspc, tcbInfo.version); + TcbInfoBasic memory tcbInfo; + (reqData, tcbInfo) = _buildAttestationData(tcbInfoObj.tcbInfoStr, tcbInfoObj.signature); + key = FMSPC_TCB_KEY(uint8(tcbInfo.id), tcbInfo.fmspc, tcbInfo.version); if (block.timestamp < tcbInfo.issueDate || block.timestamp > tcbInfo.nextUpdate) { revert TCB_Expired(); } - AttestationRequestData memory reqData = AttestationRequestData({ - recipient: msg.sender, - expirationTime: uint64(tcbInfo.nextUpdate), - revocable: true, - refUID: predecessorAttestationId, - data: attestationData, - value: 0 - }); - bytes32 schemaId = tcbInfo.version < 3 ? fmpscTcbV2SchemaID() : fmpscTcbV3SchemaID(); - req = AttestationRequest({schema: schemaId, data: reqData}); } function _buildAttestationData(string memory tcbInfoStr, bytes memory signature) @@ -181,9 +156,8 @@ abstract contract FmspcTcbDao is DaoBase, SigVerifyBase { function _validateTcbInfo(TcbInfoJsonObj calldata tcbInfoObj) private view { // Get TCB Signing Cert - bytes32 tcbSigningAttestationId = Pcs.pcsCertAttestations(CA.SIGNING); - bytes memory signingDer = getAttestedData(tcbSigningAttestationId); - + bytes memory signingDer = _fetchDataFromResolver(Pcs.PCS_KEY(CA.SIGNING, false), false); + // Validate signature bool sigVerified = verifySignature(sha256(bytes(tcbInfoObj.tcbInfoStr)), tcbInfoObj.signature, signingDer); diff --git a/src/bases/PckDao.sol b/src/bases/PckDao.sol index b86932d..827b4f1 100644 --- a/src/bases/PckDao.sol +++ b/src/bases/PckDao.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {CA, AttestationRequestData, AttestationRequest} from "../Common.sol"; +import {CA} from "../Common.sol"; import {PCKHelper, X509CertObj} from "../helpers/PCKHelper.sol"; import {X509CRLHelper, X509CRLObj} from "../helpers/X509CRLHelper.sol"; @@ -12,6 +12,9 @@ import {PcsDao} from "./PcsDao.sol"; import {DaoBase} from "./DaoBase.sol"; import {SigVerifyBase} from "./SigVerifyBase.sol"; +/// @notice the schema of the attested data for PCK Certs is simply DER-encoded form of the X509 +/// @notice Certificate stored in bytes + /** * @title Intel PCK Certificate Data Access Object * @notice This contract is heavily inspired by Sections 4.2.2, 4.2.4 and 4.2.8 in the Intel SGX PCCS Design Guideline @@ -21,15 +24,35 @@ import {SigVerifyBase} from "./SigVerifyBase.sol"; abstract contract PckDao is DaoBase, SigVerifyBase { using EnumerableSet for EnumerableSet.Bytes32Set; + // first 4 bytes of keccak256('PCK_MAGIC') + bytes4 constant PCK_MAGIC = 0xf0e2a246; + // first 4 bytes of keccak256('TCB_MAPPING_MAGIC') + bytes4 constant TCB_MAPPING_MAGIC = 0x5b8e7b4e; + + // 167c231a error Certificate_Revoked(uint256 serialNum); + // dba942a2 error Certificate_Expired(); + // 1e7ab599 error Invalid_Issuer_Name(); + // 92ec707e error Invalid_Subject_Name(); + // e6612a12 error Expired_Certificates(); + // 4a629e24 error TCB_Mismatch(); + // cd69d374 error Missing_Issuer(); + // e7ef341f error Invalid_Signature(); + /// @notice the input CA parameter can only be either PROCESSOR or PLATFORM + // 9849e774 + error Invalid_PCK_CA(CA ca); + /// @notice The corresponding PCK Certificate cannot be found for the given platform + // 82fba295 + error Pck_Not_Found(); + string constant PCK_PLATFORM_CA_COMMON_NAME = "Intel SGX PCK Platform CA"; string constant PCK_PROCESSOR_CA_COMMON_NAME = "Intel SGX PCK Processor CA"; string constant PCK_COMMON_NAME = "Intel SGX PCK Certificate"; @@ -38,29 +61,6 @@ abstract contract PckDao is DaoBase, SigVerifyBase { PCKHelper public pckLib; X509CRLHelper public crlLib; - /// mapping (keccak256(qeid ++ pceid) => Enumerable tcbm Set) - /// tcbm is a 18-byte data which is a concatenation of PCK cpusvn (16 bytes) and pcesvn (2 bytes) - mapping(bytes32 => EnumerableSet.Bytes32Set) private _tcbmHSets; - - /// @notice retrieves the attested TCBm from the registry - /// key: keccak256(qeid ++ pceid ++ platformCpuSvn ++ platformPceSvn) - /// - /// @notice the schema of the attested data is the following: - /// - bytes18 tcbm - mapping(bytes32 => bytes32) public tcbmAttestations; - - /// @notice retrieves the attested PCK Cert from the registry - /// key: keccak256(qeid ++ pceid ++ tcbm) - /// - /// @notice the schema of the attested data is the following: - /// - bytes pckCert - mapping(bytes32 => bytes32) public pckCertAttestations; - - /// @notice the input CA parameter can only be either PROCESSOR or PLATFORM - error Invalid_PCK_CA(CA ca); - /// @notice The corresponding PCK Certificate cannot be found for the given platform - error Pck_Not_Found(); - modifier pckCACheck(CA ca) { if (ca == CA.ROOT || ca == CA.SIGNING) { revert Invalid_PCK_CA(ca); @@ -68,12 +68,27 @@ abstract contract PckDao is DaoBase, SigVerifyBase { _; } - constructor(address _pcs, address _x509, address _crl) SigVerifyBase(_x509) { + constructor(address _resolver, address _p256, address _pcs, address _x509, address _crl) + SigVerifyBase(_p256, _x509) + DaoBase(_resolver) + { Pcs = PcsDao(_pcs); pckLib = PCKHelper(_x509); crlLib = X509CRLHelper(_crl); } + function PCK_KEY(bytes16 qeidBytes, bytes2 pceidBytes, bytes18 tcbmBytes) public pure returns (bytes32 key) { + key = keccak256(abi.encodePacked(PCK_MAGIC, qeidBytes, pceidBytes, tcbmBytes)); + } + + function TCB_MAPPING_KEY(bytes16 qeid, bytes2 pceid, bytes16 platformCpuSvn, bytes2 platformPceSvn) + public + pure + returns (bytes32 key) + { + key = keccak256(abi.encodePacked(TCB_MAPPING_MAGIC, qeid, pceid, platformCpuSvn, platformPceSvn)); + } + /** * @notice Section 4.2.2 (getCert(qe_id, cpu_svn, pce_svn, pce_id)) */ @@ -85,13 +100,10 @@ abstract contract PckDao is DaoBase, SigVerifyBase { ) external view returns (bytes memory pckCert) { (bytes16 qeidBytes, bytes2 pceidBytes, bytes16 platformCpuSvnBytes, bytes2 platformPceSvnBytes,) = _parseStringInputs(qeid, pceid, platformCpuSvn, platformPceSvn, ""); - - bytes32 tcbmAttestationId = - tcbmAttestations[_getTcbmKey(qeidBytes, pceidBytes, platformCpuSvnBytes, platformPceSvnBytes)]; - bytes18 tcbmBytes = bytes18(getAttestedData(tcbmAttestationId)); - bytes32 attestationId = _getPckAttestationId(qeidBytes, pceidBytes, tcbmBytes); - if (attestationId != bytes32(0)) { - pckCert = getAttestedData(attestationId); + bytes18 tcbmBytes = + _tcbrToTcbmMapping(TCB_MAPPING_KEY(qeidBytes, pceidBytes, platformCpuSvnBytes, platformPceSvnBytes)); + if (tcbmBytes != bytes18(0)) { + pckCert = _onFetchDataFromResolver(PCK_KEY(qeidBytes, pceidBytes, tcbmBytes), false); } } @@ -102,24 +114,26 @@ abstract contract PckDao is DaoBase, SigVerifyBase { { (bytes16 qeidBytes, bytes2 pceidBytes,,,) = _parseStringInputs(qeid, pceid, "", "", ""); - bytes32 k = keccak256(abi.encodePacked(qeidBytes, pceidBytes)); - uint256 n = _tcbmHSets[k].length(); + bytes18[] memory tcbmBytes = _getAllTcbs(qeidBytes, pceidBytes); + uint256 n = tcbmBytes.length; if (n > 0) { tcbms = new string[](n); pckCerts = new bytes[](n); - for (uint256 i = 0; i < n; i++) { - bytes18 tcbmBytes = bytes18(_tcbmHSets[k].at(i)); - tcbms[i] = LibString.toHexStringNoPrefix(abi.encodePacked(tcbmBytes)); - bytes32 attestationId = _getPckAttestationId(qeidBytes, pceidBytes, tcbmBytes); - pckCerts[i] = getAttestedData(attestationId); + + for (uint256 i = 0; i < n;) { + tcbms[i] = LibString.toHexStringNoPrefix(abi.encodePacked(tcbmBytes[i])); + pckCerts[i] = _onFetchDataFromResolver(PCK_KEY(qeidBytes, pceidBytes, tcbmBytes[i]), false); + + unchecked { + i++; + } } } } /** * @notice Modified from Section 4.2.8 (getPlatformTcbsById) - * @dev For simplicity's sake, the contract currently requires all the necessary parameters - * to return a single tcbm. + * @notice Fetches the mapping for the input raw TCB to an attested tcbm */ function getPlatformTcbByIdAndSvns( string calldata qeid, @@ -129,10 +143,10 @@ abstract contract PckDao is DaoBase, SigVerifyBase { ) external view returns (string memory tcbm) { (bytes16 qeidBytes, bytes2 pceidBytes, bytes16 platformCpuSvnBytes, bytes2 platformPceSvnBytes,) = _parseStringInputs(qeid, pceid, platformCpuSvn, platformPceSvn, ""); - - bytes32 attestationId = _getTcbmAttestationId(qeidBytes, pceidBytes, platformCpuSvnBytes, platformPceSvnBytes); - if (attestationId != bytes32(0)) { - tcbm = LibString.toHexStringNoPrefix(abi.encodePacked(bytes18(getAttestedData(attestationId)))); + bytes18 tcbmBytes = + _tcbrToTcbmMapping(TCB_MAPPING_KEY(qeidBytes, pceidBytes, platformCpuSvnBytes, platformPceSvnBytes)); + if (tcbmBytes != bytes18(0)) { + tcbm = LibString.toHexStringNoPrefix(abi.encodePacked(tcbmBytes)); } } @@ -141,10 +155,7 @@ abstract contract PckDao is DaoBase, SigVerifyBase { * @notice This method requires an additional CA parameter, because the on-chain PCCS does not * store any data that is contained in the PLATFORMS table. * @notice Therefore, there is no way to form a mapping between (qeid, pceid) to its corresponding CA. - * @notice Hence, it is explicitly required to be stated here. * @param cert DER-encoded PCK Leaf Certificate - * @dev Attestation Registry Entrypoint Contracts, such as Portals on Verax are responsible - * @dev for performing ECDSA verification on the provided PCK Certs prior to attestations */ function upsertPckCert( CA ca, @@ -155,21 +166,27 @@ abstract contract PckDao is DaoBase, SigVerifyBase { ) external pckCACheck(ca) returns (bytes32 attestationId) { (bytes16 qeidBytes, bytes2 pceidBytes,,, bytes18 tcbmBytes) = _parseStringInputs(qeid, pceid, "", "", tcbm); bytes32 hash = _validatePck(ca, cert, tcbmBytes, pceidBytes); - AttestationRequest memory req = _buildPckCertAttestationRequest(qeidBytes, pceidBytes, tcbmBytes, cert); - attestationId = _attestPck(req, hash); - pckCertAttestations[keccak256(abi.encodePacked(qeidBytes, pceidBytes, tcbmBytes))] = attestationId; + bytes32 key = PCK_KEY(qeidBytes, pceidBytes, tcbmBytes); + attestationId = _attestPck(cert, hash, key); _upsertTcbm(qeidBytes, pceidBytes, tcbmBytes); } - /// @dev currently missing strict TCB check on platformCpuSvn and platformPceSvn - /// @dev is recommended to overwrite this method to implement TCB check + /** + * @notice this method creates a mapping for raw TCB values to a "known" TCBm svns + * @notice this contract does not provide implementation for determining the best tcbm for + * the given raw TCB values + * @dev should override the _setTcbrToTcbmMapping() method + * to implement their own tcbm selection implementation + * @dev this function does not require for explicit attestations, but implementers may implement one + * if neccessary. + */ function upsertPlatformTcbs( string calldata qeid, string calldata pceid, string calldata platformCpuSvn, string calldata platformPceSvn, string calldata tcbm - ) external virtual returns (bytes32 attestationId) { + ) external returns (bytes32) { ( bytes16 qeidBytes, bytes2 pceidBytes, @@ -178,23 +195,21 @@ abstract contract PckDao is DaoBase, SigVerifyBase { bytes18 tcbmBytes ) = _parseStringInputs(qeid, pceid, platformCpuSvn, platformPceSvn, tcbm); - bytes32 pckKey = keccak256(abi.encodePacked(qeidBytes, pceidBytes, tcbmBytes)); - bytes32 pckAttestationId = pckCertAttestations[pckKey]; + bytes32 pckKey = PCK_KEY(qeidBytes, pceidBytes, tcbmBytes); - if (pckAttestationId == bytes32(0)) { + bytes memory der = _fetchDataFromResolver(pckKey, false); + if (der.length == 0) { revert Pck_Not_Found(); } - // parse PCK to check PCEID and tcbm - bytes memory der = getAttestedData(pckAttestationId); + // parse PCK to check for whether the provided PCEID and tcbm values are valid X509CertObj memory pck = pckLib.parseX509DER(der); _validatePckTcb(pceidBytes, tcbmBytes, der, pck.extensionPtr); - AttestationRequest memory req = - _buildTcbmAttestationRequest(qeidBytes, pceidBytes, platformCpuSvnBytes, platformPceSvnBytes, tcbmBytes); - attestationId = _attestTcbm(req); - bytes32 tcbmKey = _getTcbmKey(qeidBytes, pceidBytes, platformCpuSvnBytes, platformPceSvnBytes); - tcbmAttestations[tcbmKey] = attestationId; + bytes32 tcbmMappingKey = TCB_MAPPING_KEY(qeidBytes, pceidBytes, platformCpuSvnBytes, platformPceSvnBytes); + _setTcbrToTcbmMapping(tcbmMappingKey, tcbmBytes); + + return bytes32(0); } /** @@ -204,126 +219,51 @@ abstract contract PckDao is DaoBase, SigVerifyBase { * @return rootCert - Intel SGX Root CA (DER-encoded) */ function getPckCertChain(CA ca) - public + external view pckCACheck(ca) returns (bytes memory intermediateCert, bytes memory rootCert) { - bytes32 intermediateCertAttestationId = Pcs.pcsCertAttestations(ca); - bytes32 rootCertAttestationId = Pcs.pcsCertAttestations(CA.ROOT); - intermediateCert = getAttestedData(intermediateCertAttestationId); - rootCert = getAttestedData(rootCertAttestationId); - } - - /** - * @dev call this method to check whether the provided pck certificate has been revoked - */ - function _checkPckIsRevocable(CA ca, bytes memory pck) internal view pckCACheck(ca) returns (bool revocable) { - uint256 serialNumber = pckLib.getSerialNumber(pck); - bytes memory crlData = getAttestedData(Pcs.pcsCrlAttestations(ca)); - revocable = crlLib.serialNumberIsRevoked(serialNumber, crlData); + intermediateCert = _onFetchDataFromResolver(Pcs.PCS_KEY(ca, false), false); + rootCert = _onFetchDataFromResolver(Pcs.PCS_KEY(CA.ROOT, false), false); } /** - * @dev overwrite this method to define the schemaID for the attestation of PCK Certificates - */ - function pckSchemaID() public view virtual returns (bytes32 PCK_SCHEMA_ID); - - function tcbmSchemaID() public view virtual returns (bytes32 TCBM_SCHEMA_ID); - - /** - * @dev implement logic to validate and attest PCK Certificates - * @param req structure as defined by EAS - * https://github.com/ethereum-attestation-service/eas-contracts/blob/52af661748bde9b40ae782907702f885852bc149/contracts/IEAS.sol#L9C1-L23C2 + * @notice attests collateral via the Resolver * @return attestationId */ - function _attestPck(AttestationRequest memory req, bytes32 hash) internal virtual returns (bytes32 attestationId); + function _attestPck(bytes memory reqData, bytes32 hash, bytes32 key) + internal + virtual + returns (bytes32 attestationId) + { + (attestationId,) = resolver.attest(key, reqData, hash); + } /** - * @dev implement logic to validate and attest TCBm - * @param req structure as defined by EAS - * https://github.com/ethereum-attestation-service/eas-contracts/blob/52af661748bde9b40ae782907702f885852bc149/contracts/IEAS.sol#L9C1-L23C2 - * @return attestationId + * @dev hook that can be called after the tcbm has been verified by a PCK Certificate issued + * for the given qeid and pceid + * @dev this is essential for creating a (qeid, pceid) => tcbm association */ - function _attestTcbm(AttestationRequest memory req) internal virtual returns (bytes32 attestationId); + function _upsertTcbm(bytes16 qeid, bytes2 pceid, bytes18 tcbm) internal virtual; /** - * @notice computes the key that maps to the corresponding attestation ID + * @dev this is essential for creating a (qeid, pceid, raw tcb) => tcbm association */ - function _getPckAttestationId(bytes16 qeid, bytes2 pceid, bytes18 tcbm) - private - view - returns (bytes32 attestationId) - { - attestationId = pckCertAttestations[keccak256(abi.encodePacked(qeid, pceid, tcbm))]; - } + function _setTcbrToTcbmMapping(bytes32 tcbMappingKey, bytes18 tcbmBytes) internal virtual; /** - * @notice computes the key that maps to the corresponding attestation ID + * @dev return bytes18(0) if tcbm not found */ - function _getTcbmAttestationId(bytes16 qeid, bytes2 pceid, bytes16 platformCpuSvn, bytes2 platformPceSvn) - private - view - returns (bytes32 attestationId) - { - attestationId = tcbmAttestations[_getTcbmKey(qeid, pceid, platformCpuSvn, platformPceSvn)]; - } + function _tcbrToTcbmMapping(bytes32 tcbMappingKey) internal view virtual returns (bytes18 tcbm); /** - * @notice builds an EAS compliant attestation request + * @notice fetches all tcbm bytes associated with the given qeid and pceid + * @notice tcbm is a 18-byte data which is a concatenation of PCK cpusvn (16 bytes) and pcesvn (2 bytes) */ - function _buildPckCertAttestationRequest(bytes16 qeid, bytes2 pceid, bytes18 tcbm, bytes calldata cert) - private - view - returns (AttestationRequest memory req) - { - bytes32 predecessorAttestationId = _getPckAttestationId(qeid, pceid, tcbm); - AttestationRequestData memory reqData = AttestationRequestData({ - recipient: msg.sender, - expirationTime: 0, - revocable: true, - refUID: predecessorAttestationId, - data: cert, - value: 0 - }); - req = AttestationRequest({schema: pckSchemaID(), data: reqData}); - } + function _getAllTcbs(bytes16 qeidBytes, bytes2 pceidBytes) internal view virtual returns (bytes18[] memory tcbms); - function _buildTcbmAttestationRequest( - bytes16 qeid, - bytes2 pceid, - bytes16 platformCpuSvn, - bytes2 platformPceSvn, - bytes18 tcbm - ) private view returns (AttestationRequest memory req) { - bytes32 predecessorAttestationId = _getTcbmAttestationId(qeid, pceid, platformCpuSvn, platformPceSvn); - AttestationRequestData memory reqData = AttestationRequestData({ - recipient: msg.sender, - expirationTime: 0, // assign zero here because this has already been checked - revocable: true, - refUID: predecessorAttestationId, - data: abi.encode(tcbm), - value: 0 - }); - req = AttestationRequest({schema: tcbmSchemaID(), data: reqData}); - } - - function _getTcbmKey(bytes16 qeid, bytes2 pceid, bytes16 platformCpuSvn, bytes2 platformPceSvn) - private - pure - returns (bytes32 key) - { - key = keccak256(abi.encodePacked(qeid, pceid, platformCpuSvn, platformPceSvn)); - } - - function _upsertTcbm(bytes16 qeid, bytes2 pceid, bytes18 tcbm) private { - bytes32 k = keccak256(abi.encodePacked(qeid, pceid)); - if (!_tcbmHSets[k].contains(bytes32(tcbm))) { - _tcbmHSets[k].add(bytes32(tcbm)); - } - } - - function _validatePck(CA ca, bytes memory der, bytes18 tcbm, bytes2 pceid) private view returns (bytes32 hash) { + function _validatePck(CA ca, bytes memory der, bytes18 tcbm, bytes2 pceid) internal view returns (bytes32 hash) { // Step 1: Check whether the pck has expired bool notExpired = pckLib.certIsNotExpired(der); if (!notExpired) { @@ -351,7 +291,7 @@ abstract contract PckDao is DaoBase, SigVerifyBase { _validatePckTcb(pceid, tcbm, der, pck.extensionPtr); // Step 4: Check whether the pck has been revoked - bytes memory crlData = getAttestedData(Pcs.pcsCrlAttestations(ca)); + bytes memory crlData = _fetchDataFromResolver(Pcs.PCS_KEY(ca, true), false); if (crlData.length > 0) { bool revocable = crlLib.serialNumberIsRevoked(pck.serialNumber, crlData); if (revocable) { @@ -360,7 +300,7 @@ abstract contract PckDao is DaoBase, SigVerifyBase { } // Step 5: Check signature - (bytes memory issuerCert,) = getPckCertChain(ca); + bytes memory issuerCert = _fetchDataFromResolver(Pcs.PCS_KEY(ca, false), false); if (issuerCert.length > 0) { bytes32 digest = sha256(pck.tbs); bool sigVerified = verifySignature(digest, pck.signature, issuerCert); @@ -372,7 +312,7 @@ abstract contract PckDao is DaoBase, SigVerifyBase { } } - function _validatePckTcb(bytes2 pceid, bytes18 tcbm, bytes memory der, uint256 pckExtensionPtr) private view { + function _validatePckTcb(bytes2 pceid, bytes18 tcbm, bytes memory der, uint256 pckExtensionPtr) internal view { (uint16 pcesvn, uint8[] memory cpusvns,, bytes memory pceidBytes) = pckLib.parsePckExtension(der, pckExtensionPtr); bool pceidMatched = bytes2(pceidBytes) == pceid; @@ -388,7 +328,7 @@ abstract contract PckDao is DaoBase, SigVerifyBase { } } - function _littleEndianEncode(bytes memory input) private pure returns (bytes memory encoded) { + function _littleEndianEncode(bytes memory input) internal pure returns (bytes memory encoded) { uint256 n = input.length; for (uint256 i = n; i > 0;) { encoded = abi.encodePacked(encoded, input[i - 1]); @@ -398,6 +338,9 @@ abstract contract PckDao is DaoBase, SigVerifyBase { } } + /** + * @notice converts the hexstring inputs to bytes + */ function _parseStringInputs( string memory qeid, string memory pceid, @@ -405,7 +348,7 @@ abstract contract PckDao is DaoBase, SigVerifyBase { string memory platformPceSvn, string memory tcbm ) - private + internal pure returns ( bytes16 qeidBytes, diff --git a/src/bases/PcsDao.sol b/src/bases/PcsDao.sol index 6a18ef2..3f3d420 100644 --- a/src/bases/PcsDao.sol +++ b/src/bases/PcsDao.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {CA, AttestationRequestData, AttestationRequest} from "../Common.sol"; +import {CA} from "../Common.sol"; import {X509Helper, X509CertObj} from "../helpers/X509Helper.sol"; import {X509CRLHelper, X509CRLObj} from "../helpers/X509CRLHelper.sol"; @@ -10,11 +10,14 @@ import {SigVerifyBase} from "./SigVerifyBase.sol"; import {LibString} from "solady/utils/LibString.sol"; +/// @notice the schema of the attested data for PCS Certs is simply DER-encoded form of the X509 +/// @notice Certificate stored in bytes + /** * @title Intel PCS Data Access Object - * @notice This is a core contract of our on-chain PCCS implementation as it provides methods + * @notice This is the core contract of our on-chain PCCS implementation as it provides methods * @notice to read/write essential collaterals such as the RootCA, Intermediate CAs and CRLs. - * @notice All other DAOs are expected to configure and make external calls to this contract to fetch those collaterals. + * @notice All other DAOs are expected to make external calls to this contract to fetch those collaterals. * @notice This contract is heavily inspired by Sections 4.2.5 and 4.2.6 in the Intel SGX PCCS Design Guideline * https://download.01.org/intel-sgx/sgx-dcap/1.19/linux/docs/SGX_DCAP_Caching_Service_Design_Guide.pdf */ @@ -23,46 +26,54 @@ abstract contract PcsDao is DaoBase, SigVerifyBase { X509CRLHelper public crlLib; - /// @notice Fetches the attestationId of the attested PCS Certificate - /// - /// @dev Must ensure that the public key for the configured Intel Root CA matches with - /// @dev the Intel source code at: https://github.com/intel/SGXDataCenterAttestationPrimitives/blob/39989a42bbbb0c968153a47254b6de79a27eb603/QuoteVerification/QvE/Enclave/qve.cpp#L92-L100 - /// - /// @notice the schema of the attested data is the following: - /// - bytes pcsCert - mapping(CA => bytes32) public pcsCertAttestations; - - /// @notice Fetches the attestationId of the attested PCS CRLs - /// - /// @dev Verification of CRLs are conducted as part of the PCS attestation process - /// - /// @notice the schema of the attested data is the following: - /// - bytes pcsCrl - mapping(CA => bytes32) public pcsCrlAttestations; - string constant PCK_PLATFORM_CA_COMMON_NAME = "Intel SGX PCK Platform CA"; string constant PCK_PROCESSOR_CA_COMMON_NAME = "Intel SGX PCK Processor CA"; string constant SIGNING_COMMON_NAME = "Intel SGX TCB Signing"; string constant ROOT_CA_COMMON_NAME = "Intel SGX Root CA"; - // keccak256(hex"0ba9c4c0c0c86193a3fe23d6b02cda10a8bbd4e88e48b4458561a36e705525f567918e2edc88e40d860bd0cc4ee26aacc988e505a953558c453f6b0904ae7394") - // the uncompressed (0x04) prefix is not included in the pubkey pre-image + // first 4 bytes of keccak256('PCS_MAGIC') + bytes4 constant PCS_MAGIC = 0xe90e3dc7; + + /// keccak256(hex"0ba9c4c0c0c86193a3fe23d6b02cda10a8bbd4e88e48b4458561a36e705525f567918e2edc88e40d860bd0cc4ee26aacc988e505a953558c453f6b0904ae7394") + /// the uncompressed (0x04) prefix is not included in the pubkey pre-image + /// @dev Must ensure that the public key for the configured Intel Root CA matches with + /// @dev the Intel source code at: https://github.com/intel/SGXDataCenterAttestationPrimitives/blob/39989a42bbbb0c968153a47254b6de79a27eb603/QuoteVerification/QvE/Enclave/qve.cpp#L92-L100 bytes32 constant ROOT_CA_PUBKEY_HASH = 0x89f72d7c488e5b53a77c23ebcb36970ef7eb5bcf6658e9b8292cfbe4703a8473; + // 33247a8a error Missing_Certificate(CA ca); + // 9849e774 error Invalid_PCK_CA(CA ca); - error Invalid_Issuer_Name(); - error Invalid_Subject_Name(); - error Certificate_Expired(); + // e1406f79 error Root_Key_Mismatch(); + // 291990cd error Certificate_Revoked(CA ca, uint256 serialNum); + // dba942a2 + error Certificate_Expired(); + // 1e7ab599 + error Invalid_Issuer_Name(); + // 92ec707e + error Invalid_Subject_Name(); + // e6612a12 + error Expired_Certificates(); + // 4a629e24 + error TCB_Mismatch(); + // cd69d374 error Missing_Issuer(); + // e7ef341f error Invalid_Signature(); - constructor(address _x509, address _crl) SigVerifyBase(_x509) { + constructor(address _resolver, address _p256, address _x509, address _crl) + SigVerifyBase(_p256, _x509) + DaoBase(_resolver) + { crlLib = X509CRLHelper(_crl); } + function PCS_KEY(CA ca, bool isCrl) public pure returns (bytes32 key) { + key = keccak256(abi.encodePacked(PCS_MAGIC, uint8(ca), isCrl)); + } + modifier pckCACheck(CA ca) { if (ca == CA.ROOT || ca == CA.SIGNING) { revert Invalid_PCK_CA(ca); @@ -76,16 +87,13 @@ abstract contract PcsDao is DaoBase, SigVerifyBase { * @return crl - DER-encoded CRLs that is signed by the provided cert */ function getCertificateById(CA ca) external view returns (bytes memory cert, bytes memory crl) { - bytes32 pcsCertAttestationId = pcsCertAttestations[ca]; - if (pcsCertAttestationId == bytes32(0)) { + cert = _onFetchDataFromResolver(PCS_KEY(ca, false), false); + + if (cert.length == 0) { revert Missing_Certificate(ca); } - cert = getAttestedData(pcsCertAttestationId); - bytes32 pcsCrlAttestationId = pcsCrlAttestations[ca]; - if (pcsCrlAttestationId != bytes32(0)) { - crl = getAttestedData(pcsCrlAttestationId); - } + crl = _onFetchDataFromResolver(PCS_KEY(ca, true), false); } /** @@ -95,9 +103,8 @@ abstract contract PcsDao is DaoBase, SigVerifyBase { */ function upsertPcsCertificates(CA ca, bytes calldata cert) external returns (bytes32 attestationId) { bytes32 hash = _validatePcsCert(ca, cert); - AttestationRequest memory req = _buildPcsAttestationRequest(false, ca, cert); - attestationId = _attestPcs(req, hash); - pcsCertAttestations[ca] = attestationId; + bytes32 key = PCS_KEY(ca, false); + attestationId = _attestPcs(cert, hash, key); } /** @@ -109,50 +116,29 @@ abstract contract PcsDao is DaoBase, SigVerifyBase { attestationId = _upsertPcsCrl(ca, crl); } + /** + * Section 4.2.6 (upsertRootCACrl) + */ function upsertRootCACrl(bytes calldata rootcacrl) external returns (bytes32 attestationId) { attestationId = _upsertPcsCrl(CA.ROOT, rootcacrl); } - function pcsCertSchemaID() public view virtual returns (bytes32 PCS_CERT_SCHEMA_ID); - - function pcsCrlSchemaID() public view virtual returns (bytes32 PCS_CRL_SCHEMA_ID); - /** - * @dev implement logic to validate and attest PCS Certificates or CRLs - * @param req structure as defined by EAS - * https://github.com/ethereum-attestation-service/eas-contracts/blob/52af661748bde9b40ae782907702f885852bc149/contracts/IEAS.sol#L9C1-L23C2 + * @notice attests collateral via the Resolver * @return attestationId */ - function _attestPcs(AttestationRequest memory req, bytes32 hash) internal virtual returns (bytes32 attestationId); + function _attestPcs(bytes memory reqData, bytes32 hash, bytes32 key) + internal + virtual + returns (bytes32 attestationId) + { + (attestationId,) = resolver.attest(key, reqData, hash); + } function _upsertPcsCrl(CA ca, bytes calldata crl) private returns (bytes32 attestationId) { bytes32 hash = _validatePcsCrl(ca, crl); - AttestationRequest memory req = _buildPcsAttestationRequest(true, ca, crl); - attestationId = _attestPcs(req, hash); - pcsCrlAttestations[ca] = attestationId; - } - - /** - * @notice builds an EAS compliant attestation request - * @param isCrl - true only if the attested data is a CRL - * @param der - contains the DER encoded data, specified by isCrl and CA - */ - function _buildPcsAttestationRequest(bool isCrl, CA ca, bytes calldata der) - private - view - returns (AttestationRequest memory req) - { - bytes32 predecessorAttestationId = isCrl ? pcsCrlAttestations[ca] : pcsCertAttestations[ca]; - AttestationRequestData memory reqData = AttestationRequestData({ - recipient: msg.sender, - expirationTime: 0, // assign zero here because this has already been checked - revocable: true, - refUID: predecessorAttestationId, - data: der, - value: 0 - }); - bytes32 schemaId = isCrl ? pcsCrlSchemaID() : pcsCertSchemaID(); - req = AttestationRequest({schema: schemaId, data: reqData}); + bytes32 key = PCS_KEY(ca, true); + attestationId = _attestPcs(crl, hash, key); } function _validatePcsCert(CA ca, bytes calldata cert) private view returns (bytes32 hash) { @@ -187,7 +173,7 @@ abstract contract PcsDao is DaoBase, SigVerifyBase { } // Step 3: Check Revocation Status - bytes memory rootCrlData = getAttestedData(pcsCrlAttestations[CA.ROOT]); + bytes memory rootCrlData = _fetchDataFromResolver(PCS_KEY(CA.ROOT, true), false); if (ca == CA.ROOT) { bytes memory pubKey = x509Lib.getSubjectPublicKey(cert); if (keccak256(pubKey) != ROOT_CA_PUBKEY_HASH) { @@ -254,14 +240,12 @@ abstract contract PcsDao is DaoBase, SigVerifyBase { } function _getIssuer(CA ca) private view returns (bytes memory issuerCert) { - bytes32 intermediateCertAttestationId = pcsCertAttestations[ca]; - bytes32 rootCertAttestationId = pcsCertAttestations[CA.ROOT]; if (ca == CA.PLATFORM || ca == CA.PROCESSOR) { // this is applicable to crls only // since all certs in the pcsdao are issued by the root - issuerCert = getAttestedData(intermediateCertAttestationId); + issuerCert = _fetchDataFromResolver(PCS_KEY(ca, false), false); } else { - issuerCert = getAttestedData(rootCertAttestationId); + issuerCert = _fetchDataFromResolver(PCS_KEY(CA.ROOT, false), false); } } } diff --git a/src/bases/SigVerifyBase.sol b/src/bases/SigVerifyBase.sol index e44d94b..26f298d 100644 --- a/src/bases/SigVerifyBase.sol +++ b/src/bases/SigVerifyBase.sol @@ -8,12 +8,17 @@ interface IX509 { function getSubjectPublicKey(bytes memory der) external pure returns (bytes memory pubKey); } -abstract contract SigVerifyBase { +/** + * @title Signature verification base contract + * @notice It can be extended by any contracts that required ECDSA verification + */ + +abstract contract SigVerifyBase is P256Verifier { address public x509; using BytesUtils for bytes; - constructor(address _x509helper) { + constructor(address _p256Verifier, address _x509helper) P256Verifier(_p256Verifier) { x509 = _x509helper; } @@ -31,6 +36,6 @@ abstract contract SigVerifyBase { return false; } - verified = P256Verifier.ecdsaVerify(digest, signature, pubKey); + verified = ecdsaVerify(digest, signature, pubKey); } } diff --git a/src/helpers/EnclaveIdentityHelper.sol b/src/helpers/EnclaveIdentityHelper.sol index 7d79c57..b89bdd7 100644 --- a/src/helpers/EnclaveIdentityHelper.sol +++ b/src/helpers/EnclaveIdentityHelper.sol @@ -12,8 +12,9 @@ enum EnclaveId { } /** - * @title Solidity Structure representing the EnclaveIdentity JSON - * @param identityStr Identity string object body + * @dev This is a simple representation of the Identity.json in string as a Solidity object. + * @param identityStr Identity string object body. Needs to be parsed + * and converted as IdentityObj. * @param signature The signature to be passed as bytes array */ struct EnclaveIdentityJsonObj { @@ -21,7 +22,7 @@ struct EnclaveIdentityJsonObj { bytes signature; } -/// @dev Parsed IdentityStr to an object, except for TCBLevels +/// @dev Full Solidity Object representation of Identity.json struct IdentityObj { EnclaveId id; uint32 version; @@ -53,7 +54,7 @@ struct Tcb { /** * @title Enclave Identity Helper Contract * @notice This is a standalone contract that can be used by off-chain applications and smart contracts - * to parse QEIdentity data + * to parse Identity.json, and convert as a Solidity object. */ contract EnclaveIdentityHelper { using JSONParserLib for JSONParserLib.Item; diff --git a/src/helpers/FmspcTcbHelper.sol b/src/helpers/FmspcTcbHelper.sol index 702b5d6..a544c85 100644 --- a/src/helpers/FmspcTcbHelper.sol +++ b/src/helpers/FmspcTcbHelper.sol @@ -17,7 +17,7 @@ enum TcbId { } /** - * @title Solidity Object representing the TCBInfo JSON + * @dev This is a simple representation of the TCBInfo.json in string as a Solidity object. * @param tcbInfo: tcbInfoJson.tcbInfo string object body * @param signature The signature to be passed as bytes array */ @@ -26,6 +26,7 @@ struct TcbInfoJsonObj { bytes signature; } +/// @dev Solidity object representing TCBInfo.json excluding TCBLevels struct TcbInfoBasic { /// the name "tcbType" can be confusing/misleading /// as the tcbType referred here in this struct is the type @@ -50,6 +51,7 @@ struct TCBLevelsObj { uint8[] tdxSvns; uint64 tcbDateTimestamp; TCBStatus status; + string[] advisoryIDs; } struct TDXModule { @@ -87,11 +89,6 @@ enum TCBStatus { * @title FMSPC TCB Helper Contract * @notice This is a standalone contract that can be used by off-chain applications and smart contracts * to parse TCBInfo data - * @notice The TCBInfo Object itself may vary by their version and type. - * @notice This contract only provides a simple parser that could only extract basic info about the TCBInfo - * such as, its version, type, fmspc, issue date and next update. - * @dev should consider extending this contract to implement parsers that could extract detailed TCBInfo - * using logic that complies to the specific version and type. */ contract FmspcTcbHelper { using JSONParserLib for JSONParserLib.Item; @@ -101,7 +98,6 @@ contract FmspcTcbHelper { error TCB_TDX_Version_Invalid(); error TCB_TDX_ID_Invalid(); - // 544k gas function parseTcbString(string calldata tcbInfoStr) external pure returns (TcbInfoBasic memory tcbInfo) { JSONParserLib.Item memory root = JSONParserLib.parse(tcbInfoStr); JSONParserLib.Item[] memory tcbInfoObj = root.children(); @@ -169,7 +165,6 @@ contract FmspcTcbHelper { } } - // 1.4M gas function parseTcbLevels(string calldata tcbInfoStr) external pure @@ -205,7 +200,6 @@ contract FmspcTcbHelper { } } - // 684k gas function parseTcbTdxModules(string calldata tcbInfoStr) external pure @@ -289,6 +283,13 @@ contract FmspcTcbHelper { uint64(DateTimeUtils.fromISOToTimestamp(JSONParserLib.decodeString(tcbObj[j].value()))); } else if (tcbKey.eq("tcbStatus")) { tcbLevels[i].status = _getTcbStatus(JSONParserLib.decodeString(tcbObj[j].value())); + } else if (tcbKey.eq("advisoryIDs")) { + JSONParserLib.Item[] memory advisoryArr = tcbObj[j].children(); + uint256 n = tcbObj[j].size(); + tcbLevels[i].advisoryIDs = new string[](n); + for (uint256 k = 0; k < n; k++) { + tcbLevels[i].advisoryIDs[k] = JSONParserLib.decodeString(advisoryArr[k].value()); + } } } } diff --git a/src/helpers/PCKHelper.sol b/src/helpers/PCKHelper.sol index bea362c..338d11c 100644 --- a/src/helpers/PCKHelper.sol +++ b/src/helpers/PCKHelper.sol @@ -3,6 +3,14 @@ pragma solidity ^0.8.0; import {X509Helper, X509CertObj, Asn1Decode, NodePtr, BytesUtils} from "./X509Helper.sol"; +/** + * @title PCK X509 Certificate Parser + * @notice This is an extension of the X509Helper library, + * that parses the SGX Extension ASN.1 sequence as an add-on. + * @dev This is the default library to be used as a X509 Certificate parser, + * for all Intel DCAP-related contracts. + */ + contract PCKHelper is X509Helper { using Asn1Decode for bytes; using NodePtr for uint256; @@ -28,7 +36,6 @@ contract PCKHelper is X509Helper { bool tcbFound; } - // 421k gas function parsePckExtension(bytes memory der, uint256 extensionPtr) external pure @@ -111,7 +118,7 @@ contract PCKHelper is X509Helper { pure returns (bool success, uint16 pcesvn, uint8[] memory cpusvns) { - // sibiling of tcbOid + // sibling of tcbOid uint256 tcbPtr = der.nextSiblingOf(oidPtr); // get the first svn object in the sequence uint256 svnParentPtr = der.firstChildOf(tcbPtr); @@ -123,7 +130,7 @@ contract PCKHelper is X509Helper { uint16 svnValue = svnValueBytes.length < 2 ? uint16(bytes2(svnValueBytes)) / 256 : uint16(bytes2(svnValueBytes)); if (BytesUtils.compareBytes(der.bytesAt(svnPtr), PCESVN_OID)) { - // pcesvn is 4 bytes in size + // pcesvn is 2 bytes in size pcesvn = uint16(svnValue); } else { uint8 cpusvn = uint8(svnValue); diff --git a/src/helpers/X509CRLHelper.sol b/src/helpers/X509CRLHelper.sol index e0f5e8c..af5e927 100644 --- a/src/helpers/X509CRLHelper.sol +++ b/src/helpers/X509CRLHelper.sol @@ -24,6 +24,7 @@ struct X509CRLObj { * @title X509 CRL Helper Contract * @notice This is a standalone contract that can be used by off-chain applications and smart contracts * to parse DER-encoded CRLs. + * @dev This parser is only valid for ECDSA signature algorithm and p256 key algorithm. */ contract X509CRLHelper { using Asn1Decode for bytes; @@ -106,8 +107,6 @@ contract X509CRLHelper { /// - - 1g(b) Authority Key Identifier /// 2. Signature Algorithm /// 3. Signature - /// - 3a. X value - /// - 3b. Y value function parseCRLDER(bytes calldata der) external pure returns (X509CRLObj memory crl) { uint256 root = der.root(); @@ -201,15 +200,14 @@ contract X509CRLHelper { sigPtr = der.rootOfBitStringAt(sigPtr); sigPtr = der.firstChildOf(sigPtr); - bytes memory sigX = _trimBytes(der.bytesAt(sigPtr), 32); + bytes memory r = _trimBytes(der.bytesAt(sigPtr), 32); sigPtr = der.nextSiblingOf(sigPtr); - bytes memory sigY = _trimBytes(der.bytesAt(sigPtr), 32); + bytes memory s = _trimBytes(der.bytesAt(sigPtr), 32); - sig = abi.encodePacked(sigX, sigY); + sig = abi.encodePacked(r, s); } - /// @dev remove unnecessary prefix from the input /// @dev remove unnecessary prefix from the input function _trimBytes(bytes memory input, uint256 expectedLength) private pure returns (bytes memory output) { uint256 n = input.length; diff --git a/src/helpers/X509Helper.sol b/src/helpers/X509Helper.sol index 40d371c..c6042fc 100644 --- a/src/helpers/X509Helper.sol +++ b/src/helpers/X509Helper.sol @@ -27,8 +27,7 @@ struct X509CertObj { * @title X509 Certificates Helper Contract * @notice This is a standalone contract that can be used by off-chain applications and smart contracts * to parse DER-encoded X509 certificates. - * @dev The Extension sequence in Intel PCK Certificates is a custom ASN.1 Sequence that needs to be - * @dev parsed further in a more specialized PCKHelper contract. + * @dev This parser is only valid for ECDSA signature algorithm and p256 key algorithm. */ contract X509Helper { using Asn1Decode for bytes; @@ -126,8 +125,6 @@ contract X509Helper { /// - 1h. Extensions /// 2. Signature Algorithm /// 3. Signature - /// - 3a. X value - /// - 3b. Y value function parseX509DER(bytes calldata der) external pure returns (X509CertObj memory cert) { uint256 root = der.root(); @@ -210,12 +207,12 @@ contract X509Helper { sigPtr = der.rootOfBitStringAt(sigPtr); sigPtr = der.firstChildOf(sigPtr); - bytes memory sigX = _trimBytes(der.bytesAt(sigPtr), 32); + bytes memory r = _trimBytes(der.bytesAt(sigPtr), 32); sigPtr = der.nextSiblingOf(sigPtr); - bytes memory sigY = _trimBytes(der.bytesAt(sigPtr), 32); + bytes memory s = _trimBytes(der.bytesAt(sigPtr), 32); - sig = abi.encodePacked(sigX, sigY); + sig = abi.encodePacked(r, s); } /// @dev remove unnecessary prefix from the input diff --git a/src/interfaces/IDaoAttestationResolver.sol b/src/interfaces/IDaoAttestationResolver.sol new file mode 100644 index 0000000..22bc6c6 --- /dev/null +++ b/src/interfaces/IDaoAttestationResolver.sol @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +/** + * @title PCCS Data Access Object (DAO) Resolver + * @notice The resolver associates a collateral key with an attestation ID, + * which points to the collateral data that can either be stored interanlly in the + * Resolver contract or to an attestation registry, such as EAS. + * @notice The Resolver is intended to be deployed only ONCE and must be permanently immutable + * @notice Future upgrades/re-deployments of all other PCCS contracts can simply point to this Resolver + * to retain collateral data. + */ + +interface IDaoAttestationResolver { + /** + * @param key - identifies a specific collateral. Definition varies by DAO + * @return collateralAttId - the attestation ID of the collateral + */ + function collateralPointer(bytes32 key) external view returns (bytes32 collateralAttId); + + /** + * @notice the hash of the collateral is RECOMMENDED to be stored as a separate attestation + * @dev optimizes SLOAD read cost for checking collateral correctness. (Reading the entire collateral vs 32-byte hash) + * @param key - identifies a specific collateral. Definition varies by DAO + */ + function collateralHashPointer(bytes32 key) external view returns (bytes32 collateralHashAttId); + + /** + * @notice writes collateral data on-chain + * @param key - identifies a specific collateral. Definition varies by DAO + * @param attData - serialized collateral data + * @param attDataHash - hash of attData + * @return attestationId - the ID to retrieve attData + * @return hashAttestationid - the ID to retrieve the hash of attData + */ + function attest(bytes32 key, bytes calldata attData, bytes32 attDataHash) + external + returns (bytes32 attestationId, bytes32 hashAttestationid); + + /** + * @param attestationId - identifier that is assigned to the data upon attestation + */ + function readAttestation(bytes32 attestationId) external view returns (bytes memory attData); +} diff --git a/src/utils/P256Verifier.sol b/src/utils/P256Verifier.sol index 104825a..22202a4 100644 --- a/src/utils/P256Verifier.sol +++ b/src/utils/P256Verifier.sol @@ -4,12 +4,20 @@ pragma solidity ^0.8.0; import "./BytesUtils.sol"; /** - * @notice modified from https://github.com/daimo-eth/p256-verifier/ + * @title P256Verifier Wrapper */ -library P256Verifier { +abstract contract P256Verifier { using BytesUtils for bytes; - address internal constant P256_VERIFIER = 0xc2b78104907F722DABAc4C69f826a522B2754De4; + /// @dev this address can either be: + /// - 0x100 (as defined in RIP-7212) + /// - 0xc2b78104907F722DABAc4C69f826a522B2754De4 (daimo-eth P256 implementation, ref: https://github.com/daimo-eth/p256-verifier/) + /// @dev may contain other P256 Verifier address depending on the target network + address public immutable P256_VERIFIER; + + constructor(address _verifier) { + P256_VERIFIER = _verifier; + } function ecdsaVerify(bytes32 messageHash, bytes memory signature, bytes memory key) internal diff --git a/test/TestSetupBase.t.sol b/test/TestSetupBase.t.sol index 2f0d757..2e2d60c 100644 --- a/test/TestSetupBase.t.sol +++ b/test/TestSetupBase.t.sol @@ -3,11 +3,11 @@ pragma solidity ^0.8.0; import "forge-std/Test.sol"; -import {AutomataDaoStorage} from "../src/automata_pccs/shared/AutomataDaoStorage.sol"; -import {AutomataFmspcTcbDao} from "../src/automata_pccs/AutomataFmspcTcbDao.sol"; -import {AutomataEnclaveIdentityDao} from "../src/automata_pccs/AutomataEnclaveIdentityDao.sol"; -import {AutomataPcsDao} from "../src/automata_pccs/AutomataPcsDao.sol"; -import {AutomataPckDao} from "../src/automata_pccs/AutomataPckDao.sol"; +import "../src/automata_pccs/shared/AutomataDaoStorage.sol"; +import "../src/automata_pccs/AutomataFmspcTcbDao.sol"; +import "../src/automata_pccs/AutomataEnclaveIdentityDao.sol"; +import "../src/automata_pccs/AutomataPcsDao.sol"; +import "../src/automata_pccs/AutomataPckDao.sol"; import {EnclaveIdentityHelper, EnclaveIdentityJsonObj} from "../src/helpers/EnclaveIdentityHelper.sol"; import {FmspcTcbHelper, TcbInfoJsonObj} from "../src/helpers/FmspcTcbHelper.sol"; @@ -26,8 +26,16 @@ abstract contract TestSetupBase is Test { AutomataPckDao pck; AutomataEnclaveIdentityDao enclaveIdDao; + address P256_VERIFIER; + address admin = address(1); + modifier readAsAuthorizedCaller() { + vm.startPrank(admin); + _; + vm.stopPrank(); + } + function setUp() public virtual { // pinned June 19th, 2024, 0833h GMT vm.warp(1718785993); @@ -45,19 +53,24 @@ abstract contract TestSetupBase is Test { // deploy Automata PCCS pccsStorage = new AutomataDaoStorage(); - pcs = new AutomataPcsDao(address(pccsStorage), address(x509Lib), address(x509CrlLib)); + pcs = new AutomataPcsDao(address(pccsStorage), P256_VERIFIER, address(x509Lib), address(x509CrlLib)); enclaveIdDao = new AutomataEnclaveIdentityDao( - address(pccsStorage), address(pcs), address(enclaveIdentityLib), address(x509Lib) + address(pccsStorage), P256_VERIFIER, address(pcs), address(enclaveIdentityLib), address(x509Lib) ); - fmspcTcbDao = - new AutomataFmspcTcbDao(address(pccsStorage), address(pcs), address(fsmpcTcbLib), address(x509Lib)); + fmspcTcbDao = new AutomataFmspcTcbDao( + address(pccsStorage), P256_VERIFIER, address(pcs), address(fsmpcTcbLib), address(x509Lib) + ); - pck = new AutomataPckDao(address(pccsStorage), address(pcs), address(x509Lib), address(x509CrlLib)); + pck = + new AutomataPckDao(address(pccsStorage), P256_VERIFIER, address(pcs), address(x509Lib), address(x509CrlLib)); pccsStorage.updateDao(address(pcs), address(pck), address(fmspcTcbDao), address(enclaveIdDao)); + // grants admin address permission to read collaterals + pccsStorage.setCallerAuthorization(admin, true); + vm.stopPrank(); } @@ -68,7 +81,7 @@ abstract contract TestSetupBase is Test { require(succ, "Failed to deploy P256"); // check code - address P256_VERIFIER = 0xc2b78104907F722DABAc4C69f826a522B2754De4; + P256_VERIFIER = 0xc2b78104907F722DABAc4C69f826a522B2754De4; uint256 codesize = P256_VERIFIER.code.length; require(codesize > 0, "P256 deployed to the wrong address"); } diff --git a/test/identity/AutomataEnclaveIdentityTest.t.sol b/test/identity/AutomataEnclaveIdentityTest.t.sol index 64514e0..9e0145c 100644 --- a/test/identity/AutomataEnclaveIdentityTest.t.sol +++ b/test/identity/AutomataEnclaveIdentityTest.t.sol @@ -18,14 +18,15 @@ contract AutomataEnclaveIdentityDaoTest is PCSSetupBase, IdentityConstants { EnclaveIdentityJsonObj({identityStr: string(identityStr), signature: signature}); bytes32 attestationId = enclaveIdDao.upsertEnclaveIdentity(id, version, enclaveIdentityObj); - assertEq(enclaveIdDao.enclaveIdentityAttestations(keccak256(abi.encodePacked(id, version))), attestationId); + assertEq(pccsStorage.collateralPointer(enclaveIdDao.ENCLAVE_ID_KEY(id, version)), attestationId); + vm.prank(admin); EnclaveIdentityJsonObj memory fetched = enclaveIdDao.getEnclaveIdentity(id, version); assertEq(fetched.signature, enclaveIdentityObj.signature); assertEq(keccak256(bytes(fetched.identityStr)), keccak256(bytes(enclaveIdentityObj.identityStr))); } - function testTcbIssuerChain() public { + function testTcbIssuerChain() public readAsAuthorizedCaller { (bytes memory fetchedSigning, bytes memory fetchedRoot) = enclaveIdDao.getEnclaveIdentityIssuerChain(); assertEq(keccak256(signingDer), keccak256(fetchedSigning)); assertEq(keccak256(rootDer), keccak256(fetchedRoot)); diff --git a/test/pcs/AutomataPckDaoTest.t.sol b/test/pcs/AutomataPckDaoTest.t.sol index bf33a15..a070eeb 100644 --- a/test/pcs/AutomataPckDaoTest.t.sol +++ b/test/pcs/AutomataPckDaoTest.t.sol @@ -12,23 +12,17 @@ contract AutomataPckDaoTest is PCSSetupBase { string constant cpusvn = "0c0c100fffff01000000000000000000"; string constant pcesvn = "0e00"; - bytes32 pckAttestationId; - bytes32 tcbmAttestationId; - function setUp() public override { super.setUp(); - - vm.startPrank(admin); - - pckAttestationId = pck.upsertPckCert(CA.PLATFORM, qeid, pceid, tcbm, pckDer); - tcbmAttestationId = pck.upsertPlatformTcbs(qeid, pceid, cpusvn, pcesvn, tcbm); - - vm.stopPrank(); + pck.upsertPckCert(CA.PLATFORM, qeid, pceid, tcbm, pckDer); + pck.upsertPlatformTcbs(qeid, pceid, cpusvn, pcesvn, tcbm); } - function testGetCert() public { + function testGetCert() public readAsAuthorizedCaller { bytes memory fetchedCert = pck.getCert(qeid, cpusvn, pcesvn, pceid); - bytes32 fetchedCollateralHash = pck.getCollateralHash(pckAttestationId); + (bytes16 qeidBytes, bytes2 pceidBytes,,, bytes18 tcbmBytes) = + _parseStringInputs(qeid, pceid, cpusvn, pcesvn, tcbm); + bytes32 fetchedCollateralHash = pck.getCollateralHash(pck.PCK_KEY(qeidBytes, pceidBytes, tcbmBytes)); (bytes memory tbs,) = x509Lib.getTbsAndSig(pckDer); assertEq(fetchedCollateralHash, keccak256(tbs)); assertEq(keccak256(fetchedCert), keccak256(pckDer)); @@ -39,14 +33,73 @@ contract AutomataPckDaoTest is PCSSetupBase { assertEq(keccak256(certs[0]), keccak256(pckDer)); } - function testGetPlatformTcb() public { + function testGetPlatformTcb() public readAsAuthorizedCaller { string memory fetchedTcbm = pck.getPlatformTcbByIdAndSvns(qeid, pceid, cpusvn, pcesvn); assertEq(keccak256(bytes(fetchedTcbm)), keccak256(bytes(tcbm))); } - function testPckIssuerChain() public { + function testPckIssuerChain() public readAsAuthorizedCaller { (bytes memory intermediateCert, bytes memory rootCert) = pck.getPckCertChain(CA.PLATFORM); assertEq(keccak256(platformDer), keccak256(intermediateCert)); assertEq(keccak256(rootDer), keccak256(rootCert)); } + + // HELPER + function _parseStringInputs( + string memory qeid, + string memory pceid, + string memory platformCpuSvn, + string memory platformPceSvn, + string memory tcbm + ) + private + pure + returns ( + bytes16 qeidBytes, + bytes2 pceidBytes, + bytes16 platformCpuSvnBytes, + bytes2 platformPceSvnBytes, + bytes18 tcbmBytes + ) + { + if (bytes(qeid).length == 32) { + qeidBytes = bytes16(uint128(_parseUintFromHex(qeid))); + } + if (bytes(pceid).length == 4) { + pceidBytes = bytes2(uint16(_parseUintFromHex(pceid))); + } + if (bytes(platformCpuSvn).length == 32) { + platformCpuSvnBytes = bytes16(uint128(_parseUintFromHex(platformCpuSvn))); + } + if (bytes(platformPceSvn).length == 4) { + platformPceSvnBytes = bytes2(uint16(_parseUintFromHex(platformPceSvn))); + } + if (bytes(tcbm).length == 36) { + tcbmBytes = bytes18(uint144(_parseUintFromHex(tcbm))); + } + } + + function _parseUintFromHex(string memory s) private pure returns (uint256 result) { + /// @solidity memory-safe-assembly + assembly { + let n := mload(s) + // Skip two if starts with '0x' or '0X'. + let i := shl(1, and(eq(0x3078, or(shr(240, mload(add(s, 0x20))), 0x20)), gt(n, 1))) + for {} 1 {} { + i := add(i, 1) + let c := + byte( + and(0x1f, shr(and(mload(add(s, i)), 0xff), 0x3e4088843e41bac000000000000)), + 0x3010a071000000b0104040208000c05090d060e0f + ) + n := mul(n, iszero(or(iszero(c), shr(252, result)))) + result := add(shl(4, result), sub(c, 1)) + if iszero(lt(i, n)) { break } + } + if iszero(n) { + mstore(0x00, 0x10182796) // `ParsingFailed()`. + revert(0x1c, 0x04) + } + } + } } diff --git a/test/pcs/AutomataPcsDaoTest.t.sol b/test/pcs/AutomataPcsDaoTest.t.sol index d47ae07..1542647 100644 --- a/test/pcs/AutomataPcsDaoTest.t.sol +++ b/test/pcs/AutomataPcsDaoTest.t.sol @@ -5,7 +5,39 @@ import "../pcs/PCSSetupBase.t.sol"; import {AutomataPckDao} from "../../src/automata_pccs/AutomataPckDao.sol"; contract AutomataPcsDaoTest is PCSSetupBase { - function testPcsGetCertsAndCrls() public { + function testPcsGetCertsAndCrls() public readAsAuthorizedCaller { + (bytes memory rootCa, bytes memory rootCrl) = pcs.getCertificateById(CA.ROOT); + (bytes memory platformCa, bytes memory platformCrl) = pcs.getCertificateById(CA.PLATFORM); + + assertEq(keccak256(rootCa), keccak256(rootDer)); + assertEq(keccak256(rootCrl), keccak256(rootCrlDer)); + assertEq(keccak256(platformCa), keccak256(platformDer)); + assertEq(keccak256(platformCrl), keccak256(pckCrlDer)); + } + + function testUnauthorizedRead() public { + vm.expectRevert(abi.encodeWithSelector(PcsDao.Missing_Certificate.selector, CA.ROOT)); + pcs.getCertificateById(CA.ROOT); + } + + function testCallFromAddressZero() public { + vm.startPrank(address(0)); + + (bytes memory rootCa, bytes memory rootCrl) = pcs.getCertificateById(CA.ROOT); + (bytes memory platformCa, bytes memory platformCrl) = pcs.getCertificateById(CA.PLATFORM); + + assertEq(keccak256(rootCa), keccak256(rootDer)); + assertEq(keccak256(rootCrl), keccak256(rootCrlDer)); + assertEq(keccak256(platformCa), keccak256(platformDer)); + assertEq(keccak256(platformCrl), keccak256(pckCrlDer)); + + vm.stopPrank(); + } + + function testPausedCall() public { + vm.prank(admin); + pccsStorage.pauseCallerRestriction(); + (bytes memory rootCa, bytes memory rootCrl) = pcs.getCertificateById(CA.ROOT); (bytes memory platformCa, bytes memory platformCrl) = pcs.getCertificateById(CA.PLATFORM); diff --git a/test/pcs/PCSSetupBase.t.sol b/test/pcs/PCSSetupBase.t.sol index 437d185..a2da1c5 100644 --- a/test/pcs/PCSSetupBase.t.sol +++ b/test/pcs/PCSSetupBase.t.sol @@ -7,72 +7,66 @@ import {PCSConstants} from "./PCSConstants.t.sol"; import {CA} from "../../src/Common.sol"; abstract contract PCSSetupBase is TestSetupBase, PCSConstants { - bytes32 rootAttestation; - bytes32 rootCrlAttestation; - bytes32 signingAttestation; - bytes32 platformAttestation; - bytes32 platformCrlAttestation; - function setUp() public virtual override { super.setUp(); - vm.startPrank(admin); - // insert root CA - rootAttestation = pcs.upsertPcsCertificates(CA.ROOT, rootDer); + pcs.upsertPcsCertificates(CA.ROOT, rootDer); // insert root CRL - rootCrlAttestation = pcs.upsertRootCACrl(rootCrlDer); + pcs.upsertRootCACrl(rootCrlDer); // insert Signing CA - signingAttestation = pcs.upsertPcsCertificates(CA.SIGNING, signingDer); + pcs.upsertPcsCertificates(CA.SIGNING, signingDer); // insert Platform CA - platformAttestation = pcs.upsertPcsCertificates(CA.PLATFORM, platformDer); + pcs.upsertPcsCertificates(CA.PLATFORM, platformDer); // insert PCK CRL - platformCrlAttestation = pcs.upsertPckCrl(CA.PLATFORM, pckCrlDer); - - vm.stopPrank(); + pcs.upsertPckCrl(CA.PLATFORM, pckCrlDer); } - function testPcsSetup() public { + function testPcsSetup() public readAsAuthorizedCaller { // validate RootCA attestations - bytes memory attestedData = pcs.getAttestedData(rootAttestation); - bytes32 collateralHash = pcs.getCollateralHash(rootAttestation); - + bytes32 key = pcs.PCS_KEY(CA.ROOT, false); + bytes memory attestedData = pcs.getAttestedData(key); + bytes32 collateralHash = pcs.getCollateralHash(key); (bytes memory tbs,) = x509Lib.getTbsAndSig(rootDer); bytes32 actualHash = keccak256(tbs); assertEq(actualHash, collateralHash); assertEq(keccak256(attestedData), keccak256(rootDer)); // validate RootCRL attestations - attestedData = pcs.getAttestedData(rootCrlAttestation); - collateralHash = pcs.getCollateralHash(rootCrlAttestation); + key = pcs.PCS_KEY(CA.ROOT, true); + attestedData = pcs.getAttestedData(key); + collateralHash = pcs.getCollateralHash(key); (tbs,) = x509CrlLib.getTbsAndSig(rootCrlDer); actualHash = keccak256(tbs); assertEq(actualHash, collateralHash); assertEq(keccak256(attestedData), keccak256(rootCrlDer)); // validate SigningCA attestations - attestedData = pcs.getAttestedData(signingAttestation); - collateralHash = pcs.getCollateralHash(signingAttestation); + key = pcs.PCS_KEY(CA.SIGNING, false); + attestedData = pcs.getAttestedData(key); + collateralHash = pcs.getCollateralHash(key); (tbs,) = x509CrlLib.getTbsAndSig(signingDer); actualHash = keccak256(tbs); assertEq(actualHash, collateralHash); assertEq(keccak256(attestedData), keccak256(signingDer)); // validate PlatformCA attestations - attestedData = pcs.getAttestedData(platformAttestation); - collateralHash = pcs.getCollateralHash(platformAttestation); + key = pcs.PCS_KEY(CA.PLATFORM, false); + attestedData = pcs.getAttestedData(key); + collateralHash = pcs.getCollateralHash(key); (tbs,) = x509CrlLib.getTbsAndSig(platformDer); actualHash = keccak256(tbs); assertEq(actualHash, collateralHash); assertEq(keccak256(attestedData), keccak256(platformDer)); // validate PlatformCRL attestations - attestedData = pcs.getAttestedData(platformCrlAttestation); - collateralHash = pcs.getCollateralHash(platformCrlAttestation); + key = pcs.PCS_KEY(CA.PLATFORM, true); + attestedData = pcs.getAttestedData(key); + collateralHash = pcs.getCollateralHash(key); (tbs,) = x509CrlLib.getTbsAndSig(pckCrlDer); actualHash = keccak256(tbs); assertEq(actualHash, collateralHash); diff --git a/test/tcb/AutomataTcbDaoTest.t.sol b/test/tcb/AutomataTcbDaoTest.t.sol index ec60e97..04a8e79 100644 --- a/test/tcb/AutomataTcbDaoTest.t.sol +++ b/test/tcb/AutomataTcbDaoTest.t.sol @@ -20,14 +20,16 @@ contract AutomataFmspcTcbDaoTest is PCSSetupBase, TCBConstants { TcbInfoJsonObj({tcbInfoStr: string(sgx_v2_tcbStr), signature: sgx_v2_signature}); bytes32 attestationId = fmspcTcbDao.upsertFmspcTcb(tcbInfoObj); - assertEq( - fmspcTcbDao.fmspcTcbInfoAttestations(keccak256(abi.encodePacked(tcbType, fmspcBytes, version))), - attestationId - ); + assertEq(pccsStorage.collateralPointer(fmspcTcbDao.FMSPC_TCB_KEY(tcbType, fmspcBytes, version)), attestationId); + vm.startPrank(admin); TcbInfoJsonObj memory fetched = fmspcTcbDao.getTcbInfo(tcbType, fmspcStr, version); assertEq(fetched.signature, tcbInfoObj.signature); - assertEq(fmspcTcbDao.getCollateralHash(attestationId), sha256(bytes(tcbInfoObj.tcbInfoStr))); + assertEq( + fmspcTcbDao.getCollateralHash(fmspcTcbDao.FMSPC_TCB_KEY(tcbType, fmspcBytes, version)), + sha256(bytes(tcbInfoObj.tcbInfoStr)) + ); + vm.stopPrank(); } function testAttestFmspcTcbSgxV3() public { @@ -43,14 +45,16 @@ contract AutomataFmspcTcbDaoTest is PCSSetupBase, TCBConstants { TcbInfoJsonObj({tcbInfoStr: string(sgx_v3_tcbStr), signature: sgx_v3_signature}); bytes32 attestationId = fmspcTcbDao.upsertFmspcTcb(tcbInfoObj); - assertEq( - fmspcTcbDao.fmspcTcbInfoAttestations(keccak256(abi.encodePacked(tcbType, fmspcBytes, version))), - attestationId - ); + assertEq(pccsStorage.collateralPointer(fmspcTcbDao.FMSPC_TCB_KEY(tcbType, fmspcBytes, version)), attestationId); + vm.startPrank(admin); TcbInfoJsonObj memory fetched = fmspcTcbDao.getTcbInfo(tcbType, fmspcStr, version); assertEq(fetched.signature, tcbInfoObj.signature); - assertEq(fmspcTcbDao.getCollateralHash(attestationId), sha256(bytes(tcbInfoObj.tcbInfoStr))); + assertEq( + fmspcTcbDao.getCollateralHash(fmspcTcbDao.FMSPC_TCB_KEY(tcbType, fmspcBytes, version)), + sha256(bytes(tcbInfoObj.tcbInfoStr)) + ); + vm.stopPrank(); } function testAttestFmspcTcbTdxV3() public { @@ -64,17 +68,19 @@ contract AutomataFmspcTcbDaoTest is PCSSetupBase, TCBConstants { TcbInfoJsonObj memory tcbInfoObj = TcbInfoJsonObj({tcbInfoStr: string(tdx_tcbStr), signature: tdx_signature}); bytes32 attestationId = fmspcTcbDao.upsertFmspcTcb(tcbInfoObj); - assertEq( - fmspcTcbDao.fmspcTcbInfoAttestations(keccak256(abi.encodePacked(tcbType, fmspcBytes, version))), - attestationId - ); + assertEq(pccsStorage.collateralPointer(fmspcTcbDao.FMSPC_TCB_KEY(tcbType, fmspcBytes, version)), attestationId); + vm.startPrank(admin); TcbInfoJsonObj memory fetched = fmspcTcbDao.getTcbInfo(tcbType, fmspcStr, version); assertEq(fetched.signature, tcbInfoObj.signature); - assertEq(fmspcTcbDao.getCollateralHash(attestationId), sha256(bytes(tcbInfoObj.tcbInfoStr))); + assertEq( + fmspcTcbDao.getCollateralHash(fmspcTcbDao.FMSPC_TCB_KEY(tcbType, fmspcBytes, version)), + sha256(bytes(tcbInfoObj.tcbInfoStr)) + ); + vm.stopPrank(); } - function testTcbIssuerChain() public { + function testTcbIssuerChain() public readAsAuthorizedCaller { (bytes memory fetchedSigning, bytes memory fetchedRoot) = fmspcTcbDao.getTcbIssuerChain(); assertEq(keccak256(signingDer), keccak256(fetchedSigning)); assertEq(keccak256(rootDer), keccak256(fetchedRoot));