From 806af1616a5eeeb88d0c73ee349a3d3bf5caa81f Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Mon, 3 Jun 2024 12:32:06 -0400 Subject: [PATCH 01/23] fmt --- .../scripts/testLocalExecuteBoldUpgrade.ts | 59 +++++++++++++------ 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/contracts/scripts/testLocalExecuteBoldUpgrade.ts b/contracts/scripts/testLocalExecuteBoldUpgrade.ts index 05bc3f1d1..3c18ca36a 100644 --- a/contracts/scripts/testLocalExecuteBoldUpgrade.ts +++ b/contracts/scripts/testLocalExecuteBoldUpgrade.ts @@ -1,28 +1,40 @@ import { Contract, ContractReceipt } from 'ethers' import { ethers } from 'hardhat' import { Config, DeployedContracts, getConfig, getJsonFile } from './common' -import { BOLDUpgradeAction__factory, EdgeChallengeManager__factory, RollupUserLogic__factory } from '../build/types' +import { + BOLDUpgradeAction__factory, + EdgeChallengeManager__factory, + RollupUserLogic__factory, +} from '../build/types' import { abi as UpgradeExecutorAbi } from './files/UpgradeExecutor.json' import dotenv from 'dotenv' -import { BOLDUpgradeAction, RollupMigratedEvent } from '../build/types/src/rollup/BOLDUpgradeAction.sol/BOLDUpgradeAction' +import { + BOLDUpgradeAction, + RollupMigratedEvent, +} from '../build/types/src/rollup/BOLDUpgradeAction.sol/BOLDUpgradeAction' import { JsonRpcProvider } from '@ethersproject/providers' import { getAddress } from 'ethers/lib/utils' dotenv.config() -async function perform(l1Rpc: JsonRpcProvider, config: Config, deployedContracts: DeployedContracts) { - await l1Rpc.send( - "hardhat_impersonateAccount", - ["0xE6841D92B0C345144506576eC13ECf5103aC7f49".toLowerCase()], +async function perform( + l1Rpc: JsonRpcProvider, + config: Config, + deployedContracts: DeployedContracts +) { + await l1Rpc.send('hardhat_impersonateAccount', [ + '0xE6841D92B0C345144506576eC13ECf5103aC7f49'.toLowerCase(), + ]) + + await l1Rpc.send('hardhat_setBalance', [ + '0xE6841D92B0C345144506576eC13ECf5103aC7f49', + '0x1000000000000000', + ]) + + const timelockImposter = l1Rpc.getSigner( + '0xE6841D92B0C345144506576eC13ECf5103aC7f49'.toLowerCase() ) - await l1Rpc.send( - "hardhat_setBalance", - ["0xE6841D92B0C345144506576eC13ECf5103aC7f49", '0x1000000000000000'], - ) - - const timelockImposter = l1Rpc.getSigner('0xE6841D92B0C345144506576eC13ECf5103aC7f49'.toLowerCase()) - const upExec = new Contract( config.contracts.upgradeExecutor, UpgradeExecutorAbi, @@ -44,7 +56,12 @@ async function perform(l1Rpc: JsonRpcProvider, config: Config, deployedContracts ).wait()) as ContractReceipt } -async function verifyPostUpgrade(l1Rpc: JsonRpcProvider, config: Config, deployedContracts: DeployedContracts, receipt: ContractReceipt) { +async function verifyPostUpgrade( + l1Rpc: JsonRpcProvider, + config: Config, + deployedContracts: DeployedContracts, + receipt: ContractReceipt +) { const boldAction = BOLDUpgradeAction__factory.connect( deployedContracts.boldAction, l1Rpc @@ -58,7 +75,10 @@ async function verifyPostUpgrade(l1Rpc: JsonRpcProvider, config: Config, deploye parsedLog.challengeManager, l1Rpc ) - if (getAddress(await edgeChallengeManager.stakeToken()) != getAddress(config.settings.stakeToken)) { + if ( + getAddress(await edgeChallengeManager.stakeToken()) != + getAddress(config.settings.stakeToken) + ) { throw new Error('Stake token address does not match') } @@ -116,7 +136,10 @@ async function verifyPostUpgrade(l1Rpc: JsonRpcProvider, config: Config, deploye l1Rpc ) - if (getAddress(await assertionChain.stakeToken()) != getAddress(config.settings.stakeToken)) { + if ( + getAddress(await assertionChain.stakeToken()) != + getAddress(config.settings.stakeToken) + ) { throw new Error('Stake token address does not match') } @@ -147,7 +170,9 @@ async function main() { if (!l1RpcVal) { throw new Error('L1_RPC_URL env variable not set') } - const l1Rpc = new ethers.providers.JsonRpcProvider(l1RpcVal) as JsonRpcProvider + const l1Rpc = new ethers.providers.JsonRpcProvider( + l1RpcVal + ) as JsonRpcProvider const deployedContractsLocation = process.env.DEPLOYED_CONTRACTS_LOCATION if (!deployedContractsLocation) { From 5b93303aea1bb709db9b1e7efea70b20acecc1b6 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Mon, 3 Jun 2024 14:41:10 -0400 Subject: [PATCH 02/23] wip --- .../scripts/testLocalExecuteBoldUpgrade.ts | 226 ++++++++++++++---- 1 file changed, 183 insertions(+), 43 deletions(-) diff --git a/contracts/scripts/testLocalExecuteBoldUpgrade.ts b/contracts/scripts/testLocalExecuteBoldUpgrade.ts index 3c18ca36a..182bb88f8 100644 --- a/contracts/scripts/testLocalExecuteBoldUpgrade.ts +++ b/contracts/scripts/testLocalExecuteBoldUpgrade.ts @@ -3,20 +3,48 @@ import { ethers } from 'hardhat' import { Config, DeployedContracts, getConfig, getJsonFile } from './common' import { BOLDUpgradeAction__factory, - EdgeChallengeManager__factory, - RollupUserLogic__factory, + EdgeChallengeManager, + EdgeChallengeManager__factory, RollupUserLogic, RollupUserLogic__factory } from '../build/types' import { abi as UpgradeExecutorAbi } from './files/UpgradeExecutor.json' import dotenv from 'dotenv' import { - BOLDUpgradeAction, - RollupMigratedEvent, + RollupMigratedEvent } from '../build/types/src/rollup/BOLDUpgradeAction.sol/BOLDUpgradeAction' +import { abi as OldRollupAbi } from './files/OldRollupUserLogic.json' import { JsonRpcProvider } from '@ethersproject/providers' import { getAddress } from 'ethers/lib/utils' dotenv.config() +type UnwrapPromise = T extends Promise ? U : T + +type VerificationParams = { + l1Rpc: JsonRpcProvider + config: Config + deployedContracts: DeployedContracts + preUpgradeState: UnwrapPromise> + receipt: ContractReceipt +} + +async function getPreUpgradeState( + l1Rpc: JsonRpcProvider, + config: Config +) { + const oldRollupContract = new Contract( + config.contracts.rollup, + OldRollupAbi, + l1Rpc + ) + const zombieCount = await oldRollupContract.zombieCount() + const stakerCount = await oldRollupContract.stakerCount() + + return { + zombieCount, + stakerCount, + } +} + async function perform( l1Rpc: JsonRpcProvider, config: Config, @@ -32,7 +60,7 @@ async function perform( ]) const timelockImposter = l1Rpc.getSigner( - '0xE6841D92B0C345144506576eC13ECf5103aC7f49'.toLowerCase() + '0xE6841D92B0C345144506576eC13ECf5103aC7f49' ) const upExec = new Contract( @@ -56,12 +84,9 @@ async function perform( ).wait()) as ContractReceipt } -async function verifyPostUpgrade( - l1Rpc: JsonRpcProvider, - config: Config, - deployedContracts: DeployedContracts, - receipt: ContractReceipt -) { +async function verifyPostUpgrade(params: VerificationParams) { + const { l1Rpc, config, deployedContracts, preUpgradeState, receipt } = params + const boldAction = BOLDUpgradeAction__factory.connect( deployedContracts.boldAction, l1Rpc @@ -75,6 +100,124 @@ async function verifyPostUpgrade( parsedLog.challengeManager, l1Rpc ) + + const newRollup = RollupUserLogic__factory.connect( + parsedLog.rollup, + l1Rpc + ) + + await checkBridge(params) + await checkOldRollup(params) + await checkNewRollup(params, newRollup) + await checkNewChallengeManager(params, edgeChallengeManager) +} + +async function checkSequencerInbox(params: VerificationParams) { + const { l1Rpc, config, deployedContracts } = params + // make sure the impl was updated + if (await getProxyImpl(l1Rpc, config.contracts.sequencerInbox) !== deployedContracts.seqInbox) { + throw new Error('SequencerInbox was not upgraded') + } + + // check delay buffer parameters + // todo +} + +async function checkBridge(params: VerificationParams) { + const { + l1Rpc, + config, + deployedContracts + } = params + // make sure the impl was updated + if (await getProxyImpl(l1Rpc, config.contracts.bridge) !== deployedContracts.bridge) { + throw new Error('Bridge was not upgraded') + } +} + +async function checkOldRollup(params: VerificationParams) { + const { l1Rpc, config, deployedContracts, preUpgradeState } = params + + const oldRollupContract = new Contract( + config.contracts.rollup, + OldRollupAbi, + l1Rpc + ) + + // ensure the old rollup is paused + if (!(await oldRollupContract.paused())) { + throw new Error('Old rollup is not paused') + } + + // ensure there are no stakers + if (!(await oldRollupContract.stakerCount()).eq(0)) { + throw new Error('Old rollup has stakers') + } + + // ensure there are the right number of zombies + if ( + !(await oldRollupContract.zombieCount()).eq( + preUpgradeState.zombieCount.add(preUpgradeState.stakerCount) + ) + ) { + throw new Error('Old rollup has wrong number of zombies') + } + + // ensure old rollup was upgraded + if ( + (await getProxyImpl(l1Rpc, config.contracts.rollup, false)) !== + getAddress(deployedContracts.oldRollupUser) + ) { + throw new Error('Old rollup was not upgraded') + } +} + +async function checkNewRollup( + params: VerificationParams, + newRollup: RollupUserLogic +) { + const { l1Rpc, config } = params + + // check stake token address + if ( + getAddress(await newRollup.stakeToken()) != + getAddress(config.settings.stakeToken) + ) { + throw new Error('Stake token address does not match') + } + + // check confirm period blocks + if ( + !(await newRollup.confirmPeriodBlocks()).eq( + config.settings.confirmPeriodBlocks + ) + ) { + throw new Error('Confirm period blocks does not match') + } + + // check base stake + if (!(await newRollup.baseStake()).eq(config.settings.stakeAmt)) { + throw new Error('Base stake does not match') + } + + // check fast confirmer + if (config.settings.anyTrustFastConfirmer.length != 0) { + if ( + getAddress(await newRollup.anyTrustFastConfirmer()) !== + getAddress(config.settings.anyTrustFastConfirmer) + ) { + throw new Error('Any trust fast confirmer does not match') + } + } +} + +async function checkNewChallengeManager( + params: VerificationParams, + edgeChallengeManager: EdgeChallengeManager +) { + const { config } = params + + // check stake token address if ( getAddress(await edgeChallengeManager.stakeToken()) != getAddress(config.settings.stakeToken) @@ -82,6 +225,7 @@ async function verifyPostUpgrade( throw new Error('Stake token address does not match') } + // check mini stake amounts for (let i = 0; i < config.settings.miniStakeAmounts.length; i++) { if ( !(await edgeChallengeManager.stakeAmounts(i)).eq( @@ -92,6 +236,7 @@ async function verifyPostUpgrade( } } + // check challenge period blocks if ( !(await edgeChallengeManager.challengePeriodBlocks()).eq( config.settings.challengePeriodBlocks @@ -100,6 +245,7 @@ async function verifyPostUpgrade( throw new Error('Challenge period blocks does not match') } + // check level heights if ( !(await edgeChallengeManager.LAYERZERO_BLOCKEDGE_HEIGHT()).eq( config.settings.blockLeafSize @@ -124,45 +270,29 @@ async function verifyPostUpgrade( throw new Error('Small step leaf size does not match') } + // check num bigstep levels if ( (await edgeChallengeManager.NUM_BIGSTEP_LEVEL()) !== config.settings.numBigStepLevel ) { throw new Error('Number of big step level does not match') } +} - const assertionChain = RollupUserLogic__factory.connect( - await edgeChallengeManager.assertionChain(), - l1Rpc +async function getProxyImpl( + l1Rpc: JsonRpcProvider, + proxyAddr: string, + primary = true +) { + const primarySlot = + '0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc' + const secondarySlot = + '0x2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d' + const val = await l1Rpc.getStorageAt( + proxyAddr, + primary ? primarySlot : secondarySlot ) - - if ( - getAddress(await assertionChain.stakeToken()) != - getAddress(config.settings.stakeToken) - ) { - throw new Error('Stake token address does not match') - } - - if ( - !(await assertionChain.confirmPeriodBlocks()).eq( - config.settings.confirmPeriodBlocks - ) - ) { - throw new Error('Confirm period blocks does not match') - } - - if (!(await assertionChain.baseStake()).eq(config.settings.stakeAmt)) { - throw new Error('Base stake does not match') - } - - if (config.settings.anyTrustFastConfirmer.length != 0) { - if ( - getAddress(await assertionChain.anyTrustFastConfirmer()) !== - getAddress(config.settings.anyTrustFastConfirmer) - ) { - throw new Error('Any trust fast confirmer does not match') - } - } + return getAddress('0x' + val.slice(26)) } async function main() { @@ -191,8 +321,18 @@ async function main() { throw new Error('No boldAction contract deployed') } + const preUpgradeState = await getPreUpgradeState( + l1Rpc, + config + ) const receipt = await perform(l1Rpc, config, deployedContracts) - await verifyPostUpgrade(l1Rpc, config, deployedContracts, receipt) + await verifyPostUpgrade({ + l1Rpc, + config, + deployedContracts, + preUpgradeState, + receipt, + }) } main().then(() => console.log('Done.')) From 418b2e7946ecda7aa8c3cd0f3692275e781084b6 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Tue, 4 Jun 2024 09:31:17 -0400 Subject: [PATCH 03/23] upgrade test script --- .github/workflows/go.yml | 13 +--- contracts/package.json | 1 + .../scripts/testLocalExecuteBoldUpgrade.ts | 61 +++++++++---------- contracts/scripts/testUpgrade.bash | 11 ++++ 4 files changed, 42 insertions(+), 44 deletions(-) create mode 100755 contracts/scripts/testUpgrade.bash diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index ac40acf76..7d64bece7 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -233,9 +233,6 @@ jobs: cache: "yarn" cache-dependency-path: "**/yarn.lock" - - name: Start anvil - run: anvil --fork-url ${{ secrets.L1_RPC }} & - - name: Install packages run: yarn @@ -246,11 +243,5 @@ jobs: run: | cp ./.env-sample ./.env - - name: Deploy bold dependencies - run: yarn script:bold-prepare - - - name: Populate state hash lookup - run: yarn script:bold-populate-lookup - - - name: Execute and verify bold upgrade - run: yarn script:bold-local-execute + - name: Test upgrade + run: L1_RPC=${{ secrets.L1_RPC }} yarn test:upgrade diff --git a/contracts/package.json b/contracts/package.json index 43f4b7e73..f66b5fdcd 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -38,6 +38,7 @@ "test:storage": "./test/storage/test.bash", "test:signatures": "./test/signatures/test-sigs.bash", "test:e2e": "hardhat test test/e2e/*.ts", + "test:upgrade": "./scripts/testUpgrade.bash", "postinstall": "patch-package", "deploy-factory": "hardhat run scripts/deployment.ts", "deploy-eth-rollup": "hardhat run scripts/createEthRollup.ts", diff --git a/contracts/scripts/testLocalExecuteBoldUpgrade.ts b/contracts/scripts/testLocalExecuteBoldUpgrade.ts index 182bb88f8..b5c70bb6e 100644 --- a/contracts/scripts/testLocalExecuteBoldUpgrade.ts +++ b/contracts/scripts/testLocalExecuteBoldUpgrade.ts @@ -4,13 +4,13 @@ import { Config, DeployedContracts, getConfig, getJsonFile } from './common' import { BOLDUpgradeAction__factory, EdgeChallengeManager, - EdgeChallengeManager__factory, RollupUserLogic, RollupUserLogic__factory + EdgeChallengeManager__factory, + RollupUserLogic, + RollupUserLogic__factory, } from '../build/types' import { abi as UpgradeExecutorAbi } from './files/UpgradeExecutor.json' import dotenv from 'dotenv' -import { - RollupMigratedEvent -} from '../build/types/src/rollup/BOLDUpgradeAction.sol/BOLDUpgradeAction' +import { RollupMigratedEvent } from '../build/types/src/rollup/BOLDUpgradeAction.sol/BOLDUpgradeAction' import { abi as OldRollupAbi } from './files/OldRollupUserLogic.json' import { JsonRpcProvider } from '@ethersproject/providers' import { getAddress } from 'ethers/lib/utils' @@ -27,21 +27,22 @@ type VerificationParams = { receipt: ContractReceipt } -async function getPreUpgradeState( - l1Rpc: JsonRpcProvider, - config: Config -) { +async function getPreUpgradeState(l1Rpc: JsonRpcProvider, config: Config) { const oldRollupContract = new Contract( config.contracts.rollup, OldRollupAbi, l1Rpc ) - const zombieCount = await oldRollupContract.zombieCount() + const stakerCount = await oldRollupContract.stakerCount() + const stakers: string[] = [] + for (let i = 0; i < stakerCount; i++) { + stakers.push(await oldRollupContract.getStakerAddress(i)) + } + return { - zombieCount, - stakerCount, + stakers, } } @@ -101,10 +102,7 @@ async function verifyPostUpgrade(params: VerificationParams) { l1Rpc ) - const newRollup = RollupUserLogic__factory.connect( - parsedLog.rollup, - l1Rpc - ) + const newRollup = RollupUserLogic__factory.connect(parsedLog.rollup, l1Rpc) await checkBridge(params) await checkOldRollup(params) @@ -115,7 +113,10 @@ async function verifyPostUpgrade(params: VerificationParams) { async function checkSequencerInbox(params: VerificationParams) { const { l1Rpc, config, deployedContracts } = params // make sure the impl was updated - if (await getProxyImpl(l1Rpc, config.contracts.sequencerInbox) !== deployedContracts.seqInbox) { + if ( + (await getProxyImpl(l1Rpc, config.contracts.sequencerInbox)) !== + deployedContracts.seqInbox + ) { throw new Error('SequencerInbox was not upgraded') } @@ -124,13 +125,12 @@ async function checkSequencerInbox(params: VerificationParams) { } async function checkBridge(params: VerificationParams) { - const { - l1Rpc, - config, - deployedContracts - } = params + const { l1Rpc, config, deployedContracts } = params // make sure the impl was updated - if (await getProxyImpl(l1Rpc, config.contracts.bridge) !== deployedContracts.bridge) { + if ( + (await getProxyImpl(l1Rpc, config.contracts.bridge)) !== + deployedContracts.bridge + ) { throw new Error('Bridge was not upgraded') } } @@ -154,13 +154,11 @@ async function checkOldRollup(params: VerificationParams) { throw new Error('Old rollup has stakers') } - // ensure there are the right number of zombies - if ( - !(await oldRollupContract.zombieCount()).eq( - preUpgradeState.zombieCount.add(preUpgradeState.stakerCount) - ) - ) { - throw new Error('Old rollup has wrong number of zombies') + // ensure that the old stakers are now zombies + for (const staker of preUpgradeState.stakers) { + if (!(await oldRollupContract.isZombie(staker))) { + throw new Error('Old staker is not a zombie') + } } // ensure old rollup was upgraded @@ -321,10 +319,7 @@ async function main() { throw new Error('No boldAction contract deployed') } - const preUpgradeState = await getPreUpgradeState( - l1Rpc, - config - ) + const preUpgradeState = await getPreUpgradeState(l1Rpc, config) const receipt = await perform(l1Rpc, config, deployedContracts) await verifyPostUpgrade({ l1Rpc, diff --git a/contracts/scripts/testUpgrade.bash b/contracts/scripts/testUpgrade.bash new file mode 100755 index 000000000..3b1508446 --- /dev/null +++ b/contracts/scripts/testUpgrade.bash @@ -0,0 +1,11 @@ +#!/bin/bash + +anvil --fork-url $L1_RPC > /dev/null & + +anvil_pid=$! + +yarn script:bold-prepare && \ +yarn script:bold-populate-lookup && \ +yarn script:bold-local-execute + +kill $anvil_pid From 17de8c79d2e6eb21af0812d8b39da80caa098c5e Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Tue, 4 Jun 2024 10:00:22 -0400 Subject: [PATCH 04/23] sepolia test --- contracts/scripts/common.ts | 1 - contracts/scripts/files/sepoliaConfig.json | 53 +++++++++++++++++++ .../files/sepoliaDeployedContracts.json | 1 + .../scripts/testLocalExecuteBoldUpgrade.ts | 15 ++++-- contracts/scripts/testUpgrade.bash | 16 ++++++ 5 files changed, 80 insertions(+), 6 deletions(-) create mode 100644 contracts/scripts/files/sepoliaConfig.json create mode 100644 contracts/scripts/files/sepoliaDeployedContracts.json diff --git a/contracts/scripts/common.ts b/contracts/scripts/common.ts index 8c4de294b..e10373c89 100644 --- a/contracts/scripts/common.ts +++ b/contracts/scripts/common.ts @@ -19,7 +19,6 @@ export interface DeployedContracts { proverMath: string proverHostIo: string osp: string - newEdgeChallengeManager?: string } export const getJsonFile = (fileLocation: string) => { diff --git a/contracts/scripts/files/sepoliaConfig.json b/contracts/scripts/files/sepoliaConfig.json new file mode 100644 index 000000000..22b97aeb4 --- /dev/null +++ b/contracts/scripts/files/sepoliaConfig.json @@ -0,0 +1,53 @@ +{ + "contracts": { + "l1Timelock": "0x6EC62D826aDc24AeA360be9cF2647c42b9Cdb19b", + "rollup": "0xd80810638dbDF9081b72C1B33c65375e807281C8", + "bridge": "0x38f918D0E9F1b721EDaA41302E399fa1B79333a9", + "sequencerInbox": "0x6c97864CE4bEf387dE0b3310A44230f7E3F1be0D", + "rollupEventInbox": "0xD5B196dd7EC4D823ff5F695536c61f7c8E642B94", + "outbox": "0x65f07C7D521164a4d5DaC6eB8Fac8DA067A3B78F", + "inbox": "0xaAe29B0366299461418F5324a79Afc425BE5ae21", + "upgradeExecutor": "0x5FEe78FE9AD96c1d8557C6D6BB22Eb5A61eeD315" + }, + "proxyAdmins": { + "outbox": "0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8", + "inbox": "0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8", + "bridge": "0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8", + "rei": "0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8", + "seqInbox": "0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8" + }, + "settings": { + "challengeGracePeriodBlocks": 14400, + "confirmPeriodBlocks": 50400, + "challengePeriodBlocks": 51600, + "stakeToken": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "stakeAmt": "100000000000000000000", + "miniStakeAmounts": [ + "6000000000000000000", + "5000000000000000000", + "4000000000000000000", + "3000000000000000000", + "2000000000000000000", + "1000000000000000000" + ], + "chainId": 42161, + "anyTrustFastConfirmer": "0x0000000000000000000000000000000000000000", + "disableValidatorWhitelist": false, + "blockLeafSize": 1048576, + "bigStepLeafSize": 512, + "smallStepLeafSize": 128, + "numBigStepLevel": 4, + "maxDataSize": 117964, + "isDelayBufferable": true, + "bufferConfig": { + "max": 14400, + "threshold": 300, + "replenishRateInBasis": 500 + } + }, + "validators": [ + "0x8a8f0a24d7e58a76FC8F77bb68C7c902b91e182e", + "0x87630025E63A30eCf9Ca9d580d9D95922Fea6aF0", + "0xC32B93e581db6EBc50C08ce381143A259B92f1ED" + ] +} diff --git a/contracts/scripts/files/sepoliaDeployedContracts.json b/contracts/scripts/files/sepoliaDeployedContracts.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/contracts/scripts/files/sepoliaDeployedContracts.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/contracts/scripts/testLocalExecuteBoldUpgrade.ts b/contracts/scripts/testLocalExecuteBoldUpgrade.ts index b5c70bb6e..1ef8647ff 100644 --- a/contracts/scripts/testLocalExecuteBoldUpgrade.ts +++ b/contracts/scripts/testLocalExecuteBoldUpgrade.ts @@ -51,17 +51,21 @@ async function perform( config: Config, deployedContracts: DeployedContracts ) { + const executor = process.env.EXECUTOR + if (!executor) { + throw new Error('EXECUTOR env variable not set') + } await l1Rpc.send('hardhat_impersonateAccount', [ - '0xE6841D92B0C345144506576eC13ECf5103aC7f49'.toLowerCase(), + executor ]) await l1Rpc.send('hardhat_setBalance', [ - '0xE6841D92B0C345144506576eC13ECf5103aC7f49', + executor, '0x1000000000000000', ]) const timelockImposter = l1Rpc.getSigner( - '0xE6841D92B0C345144506576eC13ECf5103aC7f49' + executor ) const upExec = new Contract( @@ -86,7 +90,7 @@ async function perform( } async function verifyPostUpgrade(params: VerificationParams) { - const { l1Rpc, config, deployedContracts, preUpgradeState, receipt } = params + const { l1Rpc, deployedContracts, receipt } = params const boldAction = BOLDUpgradeAction__factory.connect( deployedContracts.boldAction, @@ -104,6 +108,7 @@ async function verifyPostUpgrade(params: VerificationParams) { const newRollup = RollupUserLogic__factory.connect(parsedLog.rollup, l1Rpc) + await checkSequencerInbox(params) await checkBridge(params) await checkOldRollup(params) await checkNewRollup(params, newRollup) @@ -174,7 +179,7 @@ async function checkNewRollup( params: VerificationParams, newRollup: RollupUserLogic ) { - const { l1Rpc, config } = params + const { config } = params // check stake token address if ( diff --git a/contracts/scripts/testUpgrade.bash b/contracts/scripts/testUpgrade.bash index 3b1508446..2da625822 100755 --- a/contracts/scripts/testUpgrade.bash +++ b/contracts/scripts/testUpgrade.bash @@ -4,6 +4,22 @@ anvil --fork-url $L1_RPC > /dev/null & anvil_pid=$! +chain_id=$(cast chain-id --rpc-url $L1_RPC) + +# if chain id is 1, set some env vars. if chain id is 42, set some other env vars +if [ $chain_id -eq 1 ]; then + export EXECUTOR="0xE6841D92B0C345144506576eC13ECf5103aC7f49" + export CONFIG_LOCATION="./scripts/files/mainnetConfig.json" + export DEPLOYED_CONTRACTS_LOCATION="./scripts/files/mainnetDeployedContracts.json" +elif [ $chain_id -eq 11155111 ]; then + export EXECUTOR="0x6EC62D826aDc24AeA360be9cF2647c42b9Cdb19b" + export CONFIG_LOCATION="./scripts/files/sepoliaConfig.json" + export DEPLOYED_CONTRACTS_LOCATION="./scripts/files/sepoliaDeployedContracts.json" +else + echo "Unsupported chain id: $chain_id" + exit 1 +fi + yarn script:bold-prepare && \ yarn script:bold-populate-lookup && \ yarn script:bold-local-execute From 2465452a298b86f720eb4879bcbf048c3e35d342 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Tue, 4 Jun 2024 10:45:13 -0400 Subject: [PATCH 05/23] nova test --- contracts/.env-sample | 1 + contracts/scripts/files/novaConfig.json | 53 +++++++++++++++++++ .../scripts/files/novaDeployedContracts.json | 1 + contracts/scripts/testUpgrade.bash | 16 ------ 4 files changed, 55 insertions(+), 16 deletions(-) create mode 100644 contracts/scripts/files/novaConfig.json create mode 100644 contracts/scripts/files/novaDeployedContracts.json diff --git a/contracts/.env-sample b/contracts/.env-sample index 2ff37a642..e87d92745 100644 --- a/contracts/.env-sample +++ b/contracts/.env-sample @@ -1,4 +1,5 @@ L1_RPC_URL="http://localhost:8545" L1_PRIV_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" +EXECUTOR="0xE6841D92B0C345144506576eC13ECf5103aC7f49" # for the upgrade test, address that can call the upgrade executor CONFIG_LOCATION="./scripts/files/mainnetConfig.json" DEPLOYED_CONTRACTS_LOCATION="./scripts/files/mainnetDeployedContracts.json" diff --git a/contracts/scripts/files/novaConfig.json b/contracts/scripts/files/novaConfig.json new file mode 100644 index 000000000..5da09910a --- /dev/null +++ b/contracts/scripts/files/novaConfig.json @@ -0,0 +1,53 @@ +{ + "contracts": { + "l1Timelock": "0xE6841D92B0C345144506576eC13ECf5103aC7f49", + "rollup": "0xFb209827c58283535b744575e11953DCC4bEAD88", + "bridge": "0xC1Ebd02f738644983b6C4B2d440b8e77DdE276Bd", + "sequencerInbox": "0x211E1c4c7f1bF5351Ac850Ed10FD68CFfCF6c21b", + "rollupEventInbox": "0x304807A7ed6c1296df2128E6ff3836e477329CD2", + "outbox": "0xD4B80C3D7240325D18E645B49e6535A3Bf95cc58", + "inbox": "0xc4448b71118c9071Bcb9734A0EAc55D18A153949", + "upgradeExecutor": "0x3ffFbAdAF827559da092217e474760E2b2c3CeDd" + }, + "proxyAdmins": { + "outbox": "0x71d78dc7ccc0e037e12de1e50f5470903ce37148", + "inbox": "0x71d78dc7ccc0e037e12de1e50f5470903ce37148", + "bridge": "0x71d78dc7ccc0e037e12de1e50f5470903ce37148", + "rei": "0x71d78dc7ccc0e037e12de1e50f5470903ce37148", + "seqInbox": "0x71d78dc7ccc0e037e12de1e50f5470903ce37148" + }, + "settings": { + "challengeGracePeriodBlocks": 14400, + "confirmPeriodBlocks": 50400, + "challengePeriodBlocks": 51600, + "stakeToken": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "stakeAmt": "100000000000000000000", + "miniStakeAmounts": [ + "6000000000000000000", + "5000000000000000000", + "4000000000000000000", + "3000000000000000000", + "2000000000000000000", + "1000000000000000000" + ], + "chainId": 42161, + "anyTrustFastConfirmer": "0x0000000000000000000000000000000000000000", + "disableValidatorWhitelist": false, + "blockLeafSize": 1048576, + "bigStepLeafSize": 512, + "smallStepLeafSize": 128, + "numBigStepLevel": 4, + "maxDataSize": 117964, + "isDelayBufferable": true, + "bufferConfig": { + "max": 14400, + "threshold": 300, + "replenishRateInBasis": 500 + } + }, + "validators": [ + "0xE27d4Ed355e5273A3D4855c8e11BC4a8d3e39b87", + "0x57004b440Cc4eb2FEd8c4d1865FaC907F9150C76", + "0x24ca61c31c7f9af3ab104db6b9a444f28e9071e3" + ] +} diff --git a/contracts/scripts/files/novaDeployedContracts.json b/contracts/scripts/files/novaDeployedContracts.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/contracts/scripts/files/novaDeployedContracts.json @@ -0,0 +1 @@ +{} diff --git a/contracts/scripts/testUpgrade.bash b/contracts/scripts/testUpgrade.bash index 2da625822..3b1508446 100755 --- a/contracts/scripts/testUpgrade.bash +++ b/contracts/scripts/testUpgrade.bash @@ -4,22 +4,6 @@ anvil --fork-url $L1_RPC > /dev/null & anvil_pid=$! -chain_id=$(cast chain-id --rpc-url $L1_RPC) - -# if chain id is 1, set some env vars. if chain id is 42, set some other env vars -if [ $chain_id -eq 1 ]; then - export EXECUTOR="0xE6841D92B0C345144506576eC13ECf5103aC7f49" - export CONFIG_LOCATION="./scripts/files/mainnetConfig.json" - export DEPLOYED_CONTRACTS_LOCATION="./scripts/files/mainnetDeployedContracts.json" -elif [ $chain_id -eq 11155111 ]; then - export EXECUTOR="0x6EC62D826aDc24AeA360be9cF2647c42b9Cdb19b" - export CONFIG_LOCATION="./scripts/files/sepoliaConfig.json" - export DEPLOYED_CONTRACTS_LOCATION="./scripts/files/sepoliaDeployedContracts.json" -else - echo "Unsupported chain id: $chain_id" - exit 1 -fi - yarn script:bold-prepare && \ yarn script:bold-populate-lookup && \ yarn script:bold-local-execute From c8edb9fb84d05561289c874fb77499a724fcfe05 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Tue, 4 Jun 2024 14:32:46 -0400 Subject: [PATCH 06/23] wip --- .../files/mainnetDeployedContracts.json | 52 ++--- .../scripts/files/novaDeployedContracts.json | 20 +- .../scripts/testLocalExecuteBoldUpgrade.ts | 221 +++++++++++++++--- 3 files changed, 231 insertions(+), 62 deletions(-) diff --git a/contracts/scripts/files/mainnetDeployedContracts.json b/contracts/scripts/files/mainnetDeployedContracts.json index 49149b9de..42dbff9b9 100644 --- a/contracts/scripts/files/mainnetDeployedContracts.json +++ b/contracts/scripts/files/mainnetDeployedContracts.json @@ -1,35 +1,19 @@ { - "l1UpgradeExecutorLogic": "0x86f0cf42Ad673B3D666d103E009EC142D1298a17", - "l2TimelockLogic": "0x41740588b86B4e0629b83A4e28786FF94361c3A3", - "l2GovernorLogic": "0x065620d99E1785Ccf56Fa95462d3012Eb844FDC9", - "l2FixedDelegateLogic": "0x9F43ab02cACc8e709b05936a92dC85b76D1523c4", - "l2TokenLogic": "0xC4ed0A9Ea70d5bCC69f748547650d32cC219D882", - "l2UpgradeExecutorLogic": "0x7A013834D54e9B22d1978aAe3aaDDC909Aa79115", - "l1GovernanceFactory": "0x1517114701A2dd2205F4ED1E27E3dcaDDc020a0c", - "l2GovernanceFactory": "0xDec539A8B29703F7a85f7160bBB6B8882c1D4d29", - "l1ReverseCustomGatewayLogic": "0x4e8C24617C4592895d52Ac6df29D9647e9D01Bb5", - "l1ReverseCustomGatewayProxy": "0xbbcE8aA77782F13D4202a230d978F361B011dB27", - "l2ReverseCustomGatewayLogic": "0x5D96786d3Eb13CAd05c9Fd7d0f7bb9560b4E5056", - "l2ReverseCustomGatewayProxy": "0xCaD7828a19b363A2B44717AFB1786B5196974D8E", - "l1TokenLogic": "0xAD0C361Ef902A7D9851Ca7DcC85535DA2d3C6Fc7", - "l1TokenProxy": "0xB50721BCf8d664c30412Cfbc6cf7a15145234ad1", - "novaProxyAdmin": "0xf58eA15B20983116c21b05c876cc8e6CDAe5C2b9", - "novaUpgradeExecutorLogic": "0x3096EAEdcb3A3B665552660F4d921E565D0073cB", - "novaUpgradeExecutorProxy": "0x86a02dD71363c440b21F4c0E5B2Ad01Ffe1A7482", - "novaTokenLogic": "0x099bC495EA4Fd828FEe7C636F0Ab84d0f501B96d", - "novaTokenProxy": "0xf823C3cD3CeBE0a1fA952ba88Dc9EEf8e0Bf46AD", - "l2CoreGoverner": "0xf07DeD9dC292157749B6Fd268E37DF6EA38395B9", - "l2CoreTimelock": "0x34d45e99f7D8c45ed05B5cA72D54bbD1fb3F98f0", - "l2Executor": "0xCF57572261c7c2BCF21ffD220ea7d1a27D40A827", - "l2ProxyAdmin": "0xdb216562328215E010F819B5aBe947bad4ca961e", - "l2Token": "0x912CE59144191C1204E64559FE8253a0e49E6548", - "l2TreasuryGoverner": "0x789fC99093B09aD01C34DC7251D0C89ce743e5a4", - "l2ArbTreasury": "0xF3FC178157fb3c87548bAA86F9d24BA38E649B58", - "arbitrumDAOConstitution": "0x1D62fFeB72e4c360CcBbacf7c965153b00260417", - "l2TreasuryTimelock": "0xbFc1FECa8B09A5c5D3EFfE7429eBE24b9c09EF58", - "l1Executor": "0x3ffFbAdAF827559da092217e474760E2b2c3CeDd", - "l1ProxyAdmin": "0x5613AF0474EB9c528A34701A5b1662E3C8FA0678", - "l1Timelock": "0xE6841D92B0C345144506576eC13ECf5103aC7f49", - "l1AddressRegistry": "0xd514C2b3aaBDBfa10800B9C96dc1eB25427520A0", - "l2AddressRegistry": "0x56C4E9Eb6c63aCDD19AeC2b1a00e4f0d7aBda9d3" -} + "bridge": "0x6431AF84d34F0522cAA58b221d94A150B5AdAC69", + "seqInbox": "0x2f321ed425c82E74925488139e1556f9B76a2551", + "rei": "0x776D6996c8180838dC0587aE0DE5D614b1350f37", + "outbox": "0x3A906C603F080D96dc08f81CF2889dAB6FF299dE", + "inbox": "0x820638ecd57B55e51CE6EaD7D137962E7A201dD9", + "oldRollupUser": "0x725314746e727f586E9FCA65AeD5dBe45aA71B99", + "newRollupUser": "0x987Aa6E80e995d6A76C4d061eE324fc760Ea9F61", + "newRollupAdmin": "0x6B9C4119796C80Ced5a3884027985Fd31830555b", + "challengeManager": "0xA8d14b3d9e2589CEA8644BB0f67EB90d21079f8B", + "prover0": "0x716473Fb4E7cD49c7d1eC7ec6d7490A03d9dA332", + "proverMem": "0x64079a2Edd1104a2323E2b732A1244BCE011B1F5", + "proverMath": "0x0Deeb4b6492C1a55Bb7C0555AaFf65fF6dC424B2", + "proverHostIo": "0xe24e7570Fe7207AdAaAa8c6c89a59850391B5276", + "osp": "0x67Fc5Aa53440518DdbAd4B381fD4b86fFD77B776", + "boldAction": "0xFE92134da38df8c399A90a540f20187D19216E05", + "rollupReader": "0xF85Fbebb1d6EE6DB911E136a3F24593a093f9499", + "preImageHashLookup": "0xaAcFFf96783e5EabAf08787330ccB887707444c7" +} \ No newline at end of file diff --git a/contracts/scripts/files/novaDeployedContracts.json b/contracts/scripts/files/novaDeployedContracts.json index 0967ef424..42dbff9b9 100644 --- a/contracts/scripts/files/novaDeployedContracts.json +++ b/contracts/scripts/files/novaDeployedContracts.json @@ -1 +1,19 @@ -{} +{ + "bridge": "0x6431AF84d34F0522cAA58b221d94A150B5AdAC69", + "seqInbox": "0x2f321ed425c82E74925488139e1556f9B76a2551", + "rei": "0x776D6996c8180838dC0587aE0DE5D614b1350f37", + "outbox": "0x3A906C603F080D96dc08f81CF2889dAB6FF299dE", + "inbox": "0x820638ecd57B55e51CE6EaD7D137962E7A201dD9", + "oldRollupUser": "0x725314746e727f586E9FCA65AeD5dBe45aA71B99", + "newRollupUser": "0x987Aa6E80e995d6A76C4d061eE324fc760Ea9F61", + "newRollupAdmin": "0x6B9C4119796C80Ced5a3884027985Fd31830555b", + "challengeManager": "0xA8d14b3d9e2589CEA8644BB0f67EB90d21079f8B", + "prover0": "0x716473Fb4E7cD49c7d1eC7ec6d7490A03d9dA332", + "proverMem": "0x64079a2Edd1104a2323E2b732A1244BCE011B1F5", + "proverMath": "0x0Deeb4b6492C1a55Bb7C0555AaFf65fF6dC424B2", + "proverHostIo": "0xe24e7570Fe7207AdAaAa8c6c89a59850391B5276", + "osp": "0x67Fc5Aa53440518DdbAd4B381fD4b86fFD77B776", + "boldAction": "0xFE92134da38df8c399A90a540f20187D19216E05", + "rollupReader": "0xF85Fbebb1d6EE6DB911E136a3F24593a093f9499", + "preImageHashLookup": "0xaAcFFf96783e5EabAf08787330ccB887707444c7" +} \ No newline at end of file diff --git a/contracts/scripts/testLocalExecuteBoldUpgrade.ts b/contracts/scripts/testLocalExecuteBoldUpgrade.ts index 1ef8647ff..c4b3e9085 100644 --- a/contracts/scripts/testLocalExecuteBoldUpgrade.ts +++ b/contracts/scripts/testLocalExecuteBoldUpgrade.ts @@ -3,10 +3,15 @@ import { ethers } from 'hardhat' import { Config, DeployedContracts, getConfig, getJsonFile } from './common' import { BOLDUpgradeAction__factory, + Bridge, + Bridge__factory, EdgeChallengeManager, EdgeChallengeManager__factory, + Outbox__factory, + RollupEventInbox__factory, RollupUserLogic, RollupUserLogic__factory, + SequencerInbox__factory, } from '../build/types' import { abi as UpgradeExecutorAbi } from './files/UpgradeExecutor.json' import dotenv from 'dotenv' @@ -41,8 +46,11 @@ async function getPreUpgradeState(l1Rpc: JsonRpcProvider, config: Config) { stakers.push(await oldRollupContract.getStakerAddress(i)) } + const boxes = await getAllowedInboxesOutboxesFromBridge(Bridge__factory.connect(config.contracts.bridge, l1Rpc)) + return { stakers, + ...boxes } } @@ -108,15 +116,24 @@ async function verifyPostUpgrade(params: VerificationParams) { const newRollup = RollupUserLogic__factory.connect(parsedLog.rollup, l1Rpc) - await checkSequencerInbox(params) - await checkBridge(params) + await checkSequencerInbox(params, newRollup) + await checkInbox(params) + await checkBridge(params, newRollup) + await checkRollupEventInbox(params, newRollup) + await checkOutbox(params, newRollup) await checkOldRollup(params) await checkNewRollup(params, newRollup) - await checkNewChallengeManager(params, edgeChallengeManager) + await checkNewChallengeManager(params, newRollup, edgeChallengeManager) } -async function checkSequencerInbox(params: VerificationParams) { +async function checkSequencerInbox(params: VerificationParams, newRollup: RollupUserLogic) { const { l1Rpc, config, deployedContracts } = params + + const seqInboxContract = SequencerInbox__factory.connect( + config.contracts.sequencerInbox, + l1Rpc + ) + // make sure the impl was updated if ( (await getProxyImpl(l1Rpc, config.contracts.sequencerInbox)) !== @@ -126,11 +143,90 @@ async function checkSequencerInbox(params: VerificationParams) { } // check delay buffer parameters - // todo + const buffer = await seqInboxContract.buffer() + + if (!buffer.bufferBlocks.eq(config.settings.bufferConfig.max)) { + throw new Error('bufferBlocks does not match') + } + if (!buffer.max.eq(config.settings.bufferConfig.max)) { + throw new Error('max does not match') + } + if (!buffer.threshold.eq(config.settings.bufferConfig.threshold)) { + throw new Error('threshold does not match') + } + if (!buffer.replenishRateInBasis.eq(config.settings.bufferConfig.replenishRateInBasis)) { + throw new Error('replenishRateInBasis does not match') + } + + // check rollup was set + if ((await seqInboxContract.rollup()) !== newRollup.address) { + throw new Error('SequencerInbox rollup address does not match') + } +} + +async function checkInbox(params: VerificationParams) { + const { l1Rpc, config, deployedContracts } = params + + // make sure the impl was updated + if ( + (await getProxyImpl(l1Rpc, config.contracts.inbox)) !== + deployedContracts.inbox + ) { + throw new Error('Inbox was not upgraded') + } +} + +async function checkRollupEventInbox(params: VerificationParams, newRollup: RollupUserLogic) { + const { l1Rpc, config, deployedContracts } = params + + const rollupEventInboxContract = RollupEventInbox__factory.connect( + config.contracts.rollupEventInbox, + l1Rpc + ) + + // make sure the impl was updated + if ( + (await getProxyImpl(l1Rpc, config.contracts.rollupEventInbox)) !== + deployedContracts.rei + ) { + throw new Error('RollupEventInbox was not upgraded') + } + + // make sure rollup was set + if ((await rollupEventInboxContract.rollup()) !== newRollup.address) { + throw new Error('RollupEventInbox rollup address does not match') + } } -async function checkBridge(params: VerificationParams) { +async function checkOutbox(params: VerificationParams, newRollup: RollupUserLogic) { const { l1Rpc, config, deployedContracts } = params + + const outboxContract = Outbox__factory.connect( + config.contracts.outbox, + l1Rpc + ) + + // make sure the impl was updated + if ( + (await getProxyImpl(l1Rpc, config.contracts.outbox)) !== + deployedContracts.outbox + ) { + throw new Error('Outbox was not upgraded') + } + + // make sure rollup was set + if ((await outboxContract.rollup()) !== newRollup.address) { + throw new Error('Outbox rollup address does not match') + } +} + +async function checkBridge(params: VerificationParams, newRollup: RollupUserLogic) { + const { l1Rpc, config, deployedContracts, preUpgradeState } = params + const bridgeContract = Bridge__factory.connect( + config.contracts.bridge, + l1Rpc + ) + // make sure the impl was updated if ( (await getProxyImpl(l1Rpc, config.contracts.bridge)) !== @@ -138,6 +234,25 @@ async function checkBridge(params: VerificationParams) { ) { throw new Error('Bridge was not upgraded') } + + // make sure rollup was set + if ((await bridgeContract.rollup()) !== newRollup.address) { + throw new Error('Bridge rollup address does not match') + } + + // make sure allowed inbox list is unchanged + const {inboxes, outboxes } = await getAllowedInboxesOutboxesFromBridge(bridgeContract) + if (JSON.stringify(inboxes) !== JSON.stringify(preUpgradeState.inboxes)) { + throw new Error('Allowed inbox list has changed') + } + if (JSON.stringify(outboxes) !== JSON.stringify(preUpgradeState.outboxes)) { + throw new Error('Allowed outbox list has changed') + } + + // make sure the sequencer inbox is unchanged + if (await bridgeContract.sequencerInbox() !== config.contracts.sequencerInbox) { + throw new Error('Sequencer inbox has changed') + } } async function checkOldRollup(params: VerificationParams) { @@ -168,7 +283,7 @@ async function checkOldRollup(params: VerificationParams) { // ensure old rollup was upgraded if ( - (await getProxyImpl(l1Rpc, config.contracts.rollup, false)) !== + (await getProxyImpl(l1Rpc, config.contracts.rollup, true)) !== getAddress(deployedContracts.oldRollupUser) ) { throw new Error('Old rollup was not upgraded') @@ -216,27 +331,14 @@ async function checkNewRollup( async function checkNewChallengeManager( params: VerificationParams, + newRollup: RollupUserLogic, edgeChallengeManager: EdgeChallengeManager ) { - const { config } = params - - // check stake token address - if ( - getAddress(await edgeChallengeManager.stakeToken()) != - getAddress(config.settings.stakeToken) - ) { - throw new Error('Stake token address does not match') - } + const { config, deployedContracts } = params - // check mini stake amounts - for (let i = 0; i < config.settings.miniStakeAmounts.length; i++) { - if ( - !(await edgeChallengeManager.stakeAmounts(i)).eq( - config.settings.miniStakeAmounts[i] - ) - ) { - throw new Error('Mini stake amount does not match') - } + // check assertion chain + if (getAddress(await edgeChallengeManager.assertionChain()) != getAddress(newRollup.address)) { + throw new Error('Assertion chain address does not match') } // check challenge period blocks @@ -248,6 +350,14 @@ async function checkNewChallengeManager( throw new Error('Challenge period blocks does not match') } + // check osp entry + if ( + getAddress(await edgeChallengeManager.oneStepProofEntry()) != + getAddress(deployedContracts.osp) + ) { + throw new Error('OSP address does not match') + } + // check level heights if ( !(await edgeChallengeManager.LAYERZERO_BLOCKEDGE_HEIGHT()).eq( @@ -273,6 +383,30 @@ async function checkNewChallengeManager( throw new Error('Small step leaf size does not match') } + // check stake token address + if ( + getAddress(await edgeChallengeManager.stakeToken()) != + getAddress(config.settings.stakeToken) + ) { + throw new Error('Stake token address does not match') + } + + // check mini stake amounts + for (let i = 0; i < config.settings.miniStakeAmounts.length; i++) { + if ( + !(await edgeChallengeManager.stakeAmounts(i)).eq( + config.settings.miniStakeAmounts[i] + ) + ) { + throw new Error('Mini stake amount does not match') + } + } + + // check excess stake receiver + if ((await edgeChallengeManager.excessStakeReceiver()) !== config.contracts.l1Timelock) { + throw new Error('Excess stake receiver does not match') + } + // check num bigstep levels if ( (await edgeChallengeManager.NUM_BIGSTEP_LEVEL()) !== @@ -285,7 +419,7 @@ async function checkNewChallengeManager( async function getProxyImpl( l1Rpc: JsonRpcProvider, proxyAddr: string, - primary = true + secondary = false ) { const primarySlot = '0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc' @@ -293,11 +427,44 @@ async function getProxyImpl( '0x2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d' const val = await l1Rpc.getStorageAt( proxyAddr, - primary ? primarySlot : secondarySlot + secondary ? secondarySlot : primarySlot ) return getAddress('0x' + val.slice(26)) } + +async function getAllowedInboxesOutboxesFromBridge(bridge: Bridge) { + const inboxes: string[] = [] + const outboxes: string[] = [] + + for (let i = 0;;i++) { + try { + inboxes.push(await bridge.allowedDelayedInboxList(i)) + } catch (e: any) { + if (e.code !== 'CALL_EXCEPTION') { + throw e + } + break + } + } + + for (let i = 0;;i++) { + try { + outboxes.push(await bridge.allowedOutboxList(i)) + } catch (e: any) { + if (e.code !== 'CALL_EXCEPTION') { + throw e + } + break + } + } + + return { + inboxes, + outboxes + } +} + async function main() { const l1RpcVal = process.env.L1_RPC_URL if (!l1RpcVal) { From ebf8dd4ee8fec27f4f316d217f134e189f28d0f1 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Wed, 12 Jun 2024 15:33:45 -0400 Subject: [PATCH 07/23] finish checks --- .../scripts/testLocalExecuteBoldUpgrade.ts | 97 +++++++++++++++++-- 1 file changed, 90 insertions(+), 7 deletions(-) diff --git a/contracts/scripts/testLocalExecuteBoldUpgrade.ts b/contracts/scripts/testLocalExecuteBoldUpgrade.ts index c4b3e9085..0ea979b56 100644 --- a/contracts/scripts/testLocalExecuteBoldUpgrade.ts +++ b/contracts/scripts/testLocalExecuteBoldUpgrade.ts @@ -6,12 +6,11 @@ import { Bridge, Bridge__factory, EdgeChallengeManager, - EdgeChallengeManager__factory, - Outbox__factory, + EdgeChallengeManager__factory, Outbox__factory, RollupEventInbox__factory, RollupUserLogic, RollupUserLogic__factory, - SequencerInbox__factory, + SequencerInbox__factory } from '../build/types' import { abi as UpgradeExecutorAbi } from './files/UpgradeExecutor.json' import dotenv from 'dotenv' @@ -48,8 +47,11 @@ async function getPreUpgradeState(l1Rpc: JsonRpcProvider, config: Config) { const boxes = await getAllowedInboxesOutboxesFromBridge(Bridge__factory.connect(config.contracts.bridge, l1Rpc)) + const wasmModuleRoot = await oldRollupContract.wasmModuleRoot() + return { stakers, + wasmModuleRoot, ...boxes } } @@ -122,7 +124,7 @@ async function verifyPostUpgrade(params: VerificationParams) { await checkRollupEventInbox(params, newRollup) await checkOutbox(params, newRollup) await checkOldRollup(params) - await checkNewRollup(params, newRollup) + await checkNewRollup(params, newRollup, edgeChallengeManager) await checkNewChallengeManager(params, newRollup, edgeChallengeManager) } @@ -240,7 +242,7 @@ async function checkBridge(params: VerificationParams, newRollup: RollupUserLogi throw new Error('Bridge rollup address does not match') } - // make sure allowed inbox list is unchanged + // make sure allowed inbox and outbox list is unchanged const {inboxes, outboxes } = await getAllowedInboxesOutboxesFromBridge(bridgeContract) if (JSON.stringify(inboxes) !== JSON.stringify(preUpgradeState.inboxes)) { throw new Error('Allowed inbox list has changed') @@ -290,11 +292,92 @@ async function checkOldRollup(params: VerificationParams) { } } +async function checkInitialAssertion( + params: VerificationParams, + newRollup: RollupUserLogic, + newEdgeChallengeManager: EdgeChallengeManager +) { + const { config, l1Rpc } = params + + const bridgeContract = Bridge__factory.connect(config.contracts.bridge, l1Rpc) + + const latestConfirmed = await newRollup.latestConfirmed() + + await newRollup.validateConfig(latestConfirmed, { + wasmModuleRoot: params.preUpgradeState.wasmModuleRoot, + requiredStake: config.settings.stakeAmt, + challengeManager: newEdgeChallengeManager.address, + confirmPeriodBlocks: config.settings.confirmPeriodBlocks, + nextInboxPosition: await bridgeContract.sequencerMessageCount() + }) +} + async function checkNewRollup( params: VerificationParams, - newRollup: RollupUserLogic + newRollup: RollupUserLogic, + newEdgeChallengeManager: EdgeChallengeManager ) { - const { config } = params + const { config, deployedContracts, preUpgradeState } = params + + // check bridge + if (getAddress(await newRollup.bridge()) != getAddress(config.contracts.bridge)) { + throw new Error('Bridge address does not match') + } + + // check rei + if (getAddress(await newRollup.rollupEventInbox()) != getAddress(config.contracts.rollupEventInbox)) { + throw new Error('RollupEventInbox address does not match') + } + + // check inbox + if (getAddress(await newRollup.inbox()) != getAddress(config.contracts.inbox)) { + throw new Error('Inbox address does not match') + } + + // check outbox + if (getAddress(await newRollup.outbox()) != getAddress(config.contracts.outbox)) { + throw new Error('Outbox address does not match') + } + + // check challengeManager + if (getAddress(await newRollup.challengeManager()) !== newEdgeChallengeManager.address) { + throw new Error('ChallengeManager address does not match') + } + + // chainId + if (!(await newRollup.chainId()).eq(config.settings.chainId)) { + throw new Error('Chain ID does not match') + } + + // wasmModuleRoot + if (await newRollup.wasmModuleRoot() !== preUpgradeState.wasmModuleRoot) { + throw new Error('Wasm module root does not match') + } + + // challengeGracePeriodBlocks + if (!(await newRollup.challengeGracePeriodBlocks()).eq(config.settings.challengeGracePeriodBlocks)) { + throw new Error('Challenge grace period blocks does not match') + } + + // loserStakeEscrow + if (getAddress(await newRollup.loserStakeEscrow()) !== getAddress(config.contracts.l1Timelock)) { + throw new Error('Loser stake escrow address does not match') + } + + // check initial assertion TODO + await checkInitialAssertion(params, newRollup, newEdgeChallengeManager) + + // check validator whitelist disabled + if (await newRollup.validatorWhitelistDisabled() !== config.settings.disableValidatorWhitelist) { + throw new Error('Validator whitelist disabled does not match') + } + + // make sure all validators are set + for (const val of config.validators) { + if (!(await newRollup.isValidator(val))) { + throw new Error('Validator not set') + } + } // check stake token address if ( From dd58b8b54867fc1503b55747916b1f93e4d1fa8e Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Wed, 12 Jun 2024 15:34:04 -0400 Subject: [PATCH 08/23] fmt --- .../files/mainnetDeployedContracts.json | 34 ++--- .../scripts/testLocalExecuteBoldUpgrade.ts | 130 +++++++++++------- 2 files changed, 100 insertions(+), 64 deletions(-) diff --git a/contracts/scripts/files/mainnetDeployedContracts.json b/contracts/scripts/files/mainnetDeployedContracts.json index 42dbff9b9..ad0cfbdda 100644 --- a/contracts/scripts/files/mainnetDeployedContracts.json +++ b/contracts/scripts/files/mainnetDeployedContracts.json @@ -1,19 +1,19 @@ { - "bridge": "0x6431AF84d34F0522cAA58b221d94A150B5AdAC69", - "seqInbox": "0x2f321ed425c82E74925488139e1556f9B76a2551", - "rei": "0x776D6996c8180838dC0587aE0DE5D614b1350f37", - "outbox": "0x3A906C603F080D96dc08f81CF2889dAB6FF299dE", - "inbox": "0x820638ecd57B55e51CE6EaD7D137962E7A201dD9", - "oldRollupUser": "0x725314746e727f586E9FCA65AeD5dBe45aA71B99", - "newRollupUser": "0x987Aa6E80e995d6A76C4d061eE324fc760Ea9F61", - "newRollupAdmin": "0x6B9C4119796C80Ced5a3884027985Fd31830555b", - "challengeManager": "0xA8d14b3d9e2589CEA8644BB0f67EB90d21079f8B", - "prover0": "0x716473Fb4E7cD49c7d1eC7ec6d7490A03d9dA332", - "proverMem": "0x64079a2Edd1104a2323E2b732A1244BCE011B1F5", - "proverMath": "0x0Deeb4b6492C1a55Bb7C0555AaFf65fF6dC424B2", - "proverHostIo": "0xe24e7570Fe7207AdAaAa8c6c89a59850391B5276", - "osp": "0x67Fc5Aa53440518DdbAd4B381fD4b86fFD77B776", - "boldAction": "0xFE92134da38df8c399A90a540f20187D19216E05", - "rollupReader": "0xF85Fbebb1d6EE6DB911E136a3F24593a093f9499", - "preImageHashLookup": "0xaAcFFf96783e5EabAf08787330ccB887707444c7" + "bridge": "0x820638ecd57B55e51CE6EaD7D137962E7A201dD9", + "seqInbox": "0x987Aa6E80e995d6A76C4d061eE324fc760Ea9F61", + "rei": "0x6B9C4119796C80Ced5a3884027985Fd31830555b", + "outbox": "0xA8d14b3d9e2589CEA8644BB0f67EB90d21079f8B", + "inbox": "0x716473Fb4E7cD49c7d1eC7ec6d7490A03d9dA332", + "oldRollupUser": "0x64079a2Edd1104a2323E2b732A1244BCE011B1F5", + "newRollupUser": "0x0Deeb4b6492C1a55Bb7C0555AaFf65fF6dC424B2", + "newRollupAdmin": "0xe24e7570Fe7207AdAaAa8c6c89a59850391B5276", + "challengeManager": "0x67Fc5Aa53440518DdbAd4B381fD4b86fFD77B776", + "prover0": "0xFE92134da38df8c399A90a540f20187D19216E05", + "proverMem": "0x2e13f7644014F6E934E314F0371585845de7B986", + "proverMath": "0xf4e55515952BdAb2aeB4010f777E802D61eB384f", + "proverHostIo": "0xe519389F8c262d4301Fd2830196FB7D0021daf59", + "osp": "0xcE7e5946C14Cdd1f8de4473dB9c20fd65EBd47d0", + "boldAction": "0xA496E0071780CF57cd699cb1D5Ac0CdCD6cCD673", + "rollupReader": "0xE34f6a94B64F15F13499d314B40C9Dd33FF95d92", + "preImageHashLookup": "0x747469a0b8dd2a037cbE169E57CA0b848903f18c" } \ No newline at end of file diff --git a/contracts/scripts/testLocalExecuteBoldUpgrade.ts b/contracts/scripts/testLocalExecuteBoldUpgrade.ts index 0ea979b56..bea4d8250 100644 --- a/contracts/scripts/testLocalExecuteBoldUpgrade.ts +++ b/contracts/scripts/testLocalExecuteBoldUpgrade.ts @@ -6,11 +6,12 @@ import { Bridge, Bridge__factory, EdgeChallengeManager, - EdgeChallengeManager__factory, Outbox__factory, + EdgeChallengeManager__factory, + Outbox__factory, RollupEventInbox__factory, RollupUserLogic, RollupUserLogic__factory, - SequencerInbox__factory + SequencerInbox__factory, } from '../build/types' import { abi as UpgradeExecutorAbi } from './files/UpgradeExecutor.json' import dotenv from 'dotenv' @@ -45,14 +46,16 @@ async function getPreUpgradeState(l1Rpc: JsonRpcProvider, config: Config) { stakers.push(await oldRollupContract.getStakerAddress(i)) } - const boxes = await getAllowedInboxesOutboxesFromBridge(Bridge__factory.connect(config.contracts.bridge, l1Rpc)) + const boxes = await getAllowedInboxesOutboxesFromBridge( + Bridge__factory.connect(config.contracts.bridge, l1Rpc) + ) const wasmModuleRoot = await oldRollupContract.wasmModuleRoot() return { stakers, wasmModuleRoot, - ...boxes + ...boxes, } } @@ -65,18 +68,11 @@ async function perform( if (!executor) { throw new Error('EXECUTOR env variable not set') } - await l1Rpc.send('hardhat_impersonateAccount', [ - executor - ]) + await l1Rpc.send('hardhat_impersonateAccount', [executor]) - await l1Rpc.send('hardhat_setBalance', [ - executor, - '0x1000000000000000', - ]) + await l1Rpc.send('hardhat_setBalance', [executor, '0x1000000000000000']) - const timelockImposter = l1Rpc.getSigner( - executor - ) + const timelockImposter = l1Rpc.getSigner(executor) const upExec = new Contract( config.contracts.upgradeExecutor, @@ -128,7 +124,10 @@ async function verifyPostUpgrade(params: VerificationParams) { await checkNewChallengeManager(params, newRollup, edgeChallengeManager) } -async function checkSequencerInbox(params: VerificationParams, newRollup: RollupUserLogic) { +async function checkSequencerInbox( + params: VerificationParams, + newRollup: RollupUserLogic +) { const { l1Rpc, config, deployedContracts } = params const seqInboxContract = SequencerInbox__factory.connect( @@ -156,7 +155,11 @@ async function checkSequencerInbox(params: VerificationParams, newRollup: Rollup if (!buffer.threshold.eq(config.settings.bufferConfig.threshold)) { throw new Error('threshold does not match') } - if (!buffer.replenishRateInBasis.eq(config.settings.bufferConfig.replenishRateInBasis)) { + if ( + !buffer.replenishRateInBasis.eq( + config.settings.bufferConfig.replenishRateInBasis + ) + ) { throw new Error('replenishRateInBasis does not match') } @@ -178,7 +181,10 @@ async function checkInbox(params: VerificationParams) { } } -async function checkRollupEventInbox(params: VerificationParams, newRollup: RollupUserLogic) { +async function checkRollupEventInbox( + params: VerificationParams, + newRollup: RollupUserLogic +) { const { l1Rpc, config, deployedContracts } = params const rollupEventInboxContract = RollupEventInbox__factory.connect( @@ -200,13 +206,13 @@ async function checkRollupEventInbox(params: VerificationParams, newRollup: Roll } } -async function checkOutbox(params: VerificationParams, newRollup: RollupUserLogic) { +async function checkOutbox( + params: VerificationParams, + newRollup: RollupUserLogic +) { const { l1Rpc, config, deployedContracts } = params - const outboxContract = Outbox__factory.connect( - config.contracts.outbox, - l1Rpc - ) + const outboxContract = Outbox__factory.connect(config.contracts.outbox, l1Rpc) // make sure the impl was updated if ( @@ -222,12 +228,12 @@ async function checkOutbox(params: VerificationParams, newRollup: RollupUserLogi } } -async function checkBridge(params: VerificationParams, newRollup: RollupUserLogic) { +async function checkBridge( + params: VerificationParams, + newRollup: RollupUserLogic +) { const { l1Rpc, config, deployedContracts, preUpgradeState } = params - const bridgeContract = Bridge__factory.connect( - config.contracts.bridge, - l1Rpc - ) + const bridgeContract = Bridge__factory.connect(config.contracts.bridge, l1Rpc) // make sure the impl was updated if ( @@ -243,7 +249,8 @@ async function checkBridge(params: VerificationParams, newRollup: RollupUserLogi } // make sure allowed inbox and outbox list is unchanged - const {inboxes, outboxes } = await getAllowedInboxesOutboxesFromBridge(bridgeContract) + const { inboxes, outboxes } = + await getAllowedInboxesOutboxesFromBridge(bridgeContract) if (JSON.stringify(inboxes) !== JSON.stringify(preUpgradeState.inboxes)) { throw new Error('Allowed inbox list has changed') } @@ -252,7 +259,9 @@ async function checkBridge(params: VerificationParams, newRollup: RollupUserLogi } // make sure the sequencer inbox is unchanged - if (await bridgeContract.sequencerInbox() !== config.contracts.sequencerInbox) { + if ( + (await bridgeContract.sequencerInbox()) !== config.contracts.sequencerInbox + ) { throw new Error('Sequencer inbox has changed') } } @@ -302,13 +311,13 @@ async function checkInitialAssertion( const bridgeContract = Bridge__factory.connect(config.contracts.bridge, l1Rpc) const latestConfirmed = await newRollup.latestConfirmed() - + await newRollup.validateConfig(latestConfirmed, { wasmModuleRoot: params.preUpgradeState.wasmModuleRoot, requiredStake: config.settings.stakeAmt, challengeManager: newEdgeChallengeManager.address, confirmPeriodBlocks: config.settings.confirmPeriodBlocks, - nextInboxPosition: await bridgeContract.sequencerMessageCount() + nextInboxPosition: await bridgeContract.sequencerMessageCount(), }) } @@ -320,27 +329,39 @@ async function checkNewRollup( const { config, deployedContracts, preUpgradeState } = params // check bridge - if (getAddress(await newRollup.bridge()) != getAddress(config.contracts.bridge)) { + if ( + getAddress(await newRollup.bridge()) != getAddress(config.contracts.bridge) + ) { throw new Error('Bridge address does not match') } - + // check rei - if (getAddress(await newRollup.rollupEventInbox()) != getAddress(config.contracts.rollupEventInbox)) { + if ( + getAddress(await newRollup.rollupEventInbox()) != + getAddress(config.contracts.rollupEventInbox) + ) { throw new Error('RollupEventInbox address does not match') } // check inbox - if (getAddress(await newRollup.inbox()) != getAddress(config.contracts.inbox)) { + if ( + getAddress(await newRollup.inbox()) != getAddress(config.contracts.inbox) + ) { throw new Error('Inbox address does not match') } // check outbox - if (getAddress(await newRollup.outbox()) != getAddress(config.contracts.outbox)) { + if ( + getAddress(await newRollup.outbox()) != getAddress(config.contracts.outbox) + ) { throw new Error('Outbox address does not match') } // check challengeManager - if (getAddress(await newRollup.challengeManager()) !== newEdgeChallengeManager.address) { + if ( + getAddress(await newRollup.challengeManager()) !== + newEdgeChallengeManager.address + ) { throw new Error('ChallengeManager address does not match') } @@ -350,17 +371,24 @@ async function checkNewRollup( } // wasmModuleRoot - if (await newRollup.wasmModuleRoot() !== preUpgradeState.wasmModuleRoot) { + if ((await newRollup.wasmModuleRoot()) !== preUpgradeState.wasmModuleRoot) { throw new Error('Wasm module root does not match') } // challengeGracePeriodBlocks - if (!(await newRollup.challengeGracePeriodBlocks()).eq(config.settings.challengeGracePeriodBlocks)) { + if ( + !(await newRollup.challengeGracePeriodBlocks()).eq( + config.settings.challengeGracePeriodBlocks + ) + ) { throw new Error('Challenge grace period blocks does not match') } // loserStakeEscrow - if (getAddress(await newRollup.loserStakeEscrow()) !== getAddress(config.contracts.l1Timelock)) { + if ( + getAddress(await newRollup.loserStakeEscrow()) !== + getAddress(config.contracts.l1Timelock) + ) { throw new Error('Loser stake escrow address does not match') } @@ -368,7 +396,10 @@ async function checkNewRollup( await checkInitialAssertion(params, newRollup, newEdgeChallengeManager) // check validator whitelist disabled - if (await newRollup.validatorWhitelistDisabled() !== config.settings.disableValidatorWhitelist) { + if ( + (await newRollup.validatorWhitelistDisabled()) !== + config.settings.disableValidatorWhitelist + ) { throw new Error('Validator whitelist disabled does not match') } @@ -420,7 +451,10 @@ async function checkNewChallengeManager( const { config, deployedContracts } = params // check assertion chain - if (getAddress(await edgeChallengeManager.assertionChain()) != getAddress(newRollup.address)) { + if ( + getAddress(await edgeChallengeManager.assertionChain()) != + getAddress(newRollup.address) + ) { throw new Error('Assertion chain address does not match') } @@ -486,7 +520,10 @@ async function checkNewChallengeManager( } // check excess stake receiver - if ((await edgeChallengeManager.excessStakeReceiver()) !== config.contracts.l1Timelock) { + if ( + (await edgeChallengeManager.excessStakeReceiver()) !== + config.contracts.l1Timelock + ) { throw new Error('Excess stake receiver does not match') } @@ -515,12 +552,11 @@ async function getProxyImpl( return getAddress('0x' + val.slice(26)) } - async function getAllowedInboxesOutboxesFromBridge(bridge: Bridge) { const inboxes: string[] = [] const outboxes: string[] = [] - for (let i = 0;;i++) { + for (let i = 0; ; i++) { try { inboxes.push(await bridge.allowedDelayedInboxList(i)) } catch (e: any) { @@ -531,7 +567,7 @@ async function getAllowedInboxesOutboxesFromBridge(bridge: Bridge) { } } - for (let i = 0;;i++) { + for (let i = 0; ; i++) { try { outboxes.push(await bridge.allowedOutboxList(i)) } catch (e: any) { @@ -544,7 +580,7 @@ async function getAllowedInboxesOutboxesFromBridge(bridge: Bridge) { return { inboxes, - outboxes + outboxes, } } From fa98c542b9ae88b86d60fdce43971385b6e43b32 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Wed, 12 Jun 2024 15:35:25 -0400 Subject: [PATCH 09/23] remove deployed contracts --- .../files/mainnetDeployedContracts.json | 20 +------------------ .../scripts/files/novaDeployedContracts.json | 20 +------------------ 2 files changed, 2 insertions(+), 38 deletions(-) diff --git a/contracts/scripts/files/mainnetDeployedContracts.json b/contracts/scripts/files/mainnetDeployedContracts.json index ad0cfbdda..9e26dfeeb 100644 --- a/contracts/scripts/files/mainnetDeployedContracts.json +++ b/contracts/scripts/files/mainnetDeployedContracts.json @@ -1,19 +1 @@ -{ - "bridge": "0x820638ecd57B55e51CE6EaD7D137962E7A201dD9", - "seqInbox": "0x987Aa6E80e995d6A76C4d061eE324fc760Ea9F61", - "rei": "0x6B9C4119796C80Ced5a3884027985Fd31830555b", - "outbox": "0xA8d14b3d9e2589CEA8644BB0f67EB90d21079f8B", - "inbox": "0x716473Fb4E7cD49c7d1eC7ec6d7490A03d9dA332", - "oldRollupUser": "0x64079a2Edd1104a2323E2b732A1244BCE011B1F5", - "newRollupUser": "0x0Deeb4b6492C1a55Bb7C0555AaFf65fF6dC424B2", - "newRollupAdmin": "0xe24e7570Fe7207AdAaAa8c6c89a59850391B5276", - "challengeManager": "0x67Fc5Aa53440518DdbAd4B381fD4b86fFD77B776", - "prover0": "0xFE92134da38df8c399A90a540f20187D19216E05", - "proverMem": "0x2e13f7644014F6E934E314F0371585845de7B986", - "proverMath": "0xf4e55515952BdAb2aeB4010f777E802D61eB384f", - "proverHostIo": "0xe519389F8c262d4301Fd2830196FB7D0021daf59", - "osp": "0xcE7e5946C14Cdd1f8de4473dB9c20fd65EBd47d0", - "boldAction": "0xA496E0071780CF57cd699cb1D5Ac0CdCD6cCD673", - "rollupReader": "0xE34f6a94B64F15F13499d314B40C9Dd33FF95d92", - "preImageHashLookup": "0x747469a0b8dd2a037cbE169E57CA0b848903f18c" -} \ No newline at end of file +{} \ No newline at end of file diff --git a/contracts/scripts/files/novaDeployedContracts.json b/contracts/scripts/files/novaDeployedContracts.json index 42dbff9b9..9e26dfeeb 100644 --- a/contracts/scripts/files/novaDeployedContracts.json +++ b/contracts/scripts/files/novaDeployedContracts.json @@ -1,19 +1 @@ -{ - "bridge": "0x6431AF84d34F0522cAA58b221d94A150B5AdAC69", - "seqInbox": "0x2f321ed425c82E74925488139e1556f9B76a2551", - "rei": "0x776D6996c8180838dC0587aE0DE5D614b1350f37", - "outbox": "0x3A906C603F080D96dc08f81CF2889dAB6FF299dE", - "inbox": "0x820638ecd57B55e51CE6EaD7D137962E7A201dD9", - "oldRollupUser": "0x725314746e727f586E9FCA65AeD5dBe45aA71B99", - "newRollupUser": "0x987Aa6E80e995d6A76C4d061eE324fc760Ea9F61", - "newRollupAdmin": "0x6B9C4119796C80Ced5a3884027985Fd31830555b", - "challengeManager": "0xA8d14b3d9e2589CEA8644BB0f67EB90d21079f8B", - "prover0": "0x716473Fb4E7cD49c7d1eC7ec6d7490A03d9dA332", - "proverMem": "0x64079a2Edd1104a2323E2b732A1244BCE011B1F5", - "proverMath": "0x0Deeb4b6492C1a55Bb7C0555AaFf65fF6dC424B2", - "proverHostIo": "0xe24e7570Fe7207AdAaAa8c6c89a59850391B5276", - "osp": "0x67Fc5Aa53440518DdbAd4B381fD4b86fFD77B776", - "boldAction": "0xFE92134da38df8c399A90a540f20187D19216E05", - "rollupReader": "0xF85Fbebb1d6EE6DB911E136a3F24593a093f9499", - "preImageHashLookup": "0xaAcFFf96783e5EabAf08787330ccB887707444c7" -} \ No newline at end of file +{} \ No newline at end of file From 77585a684e0f04bac43d1e32fd8c11cba2b8db49 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Wed, 12 Jun 2024 16:54:23 -0400 Subject: [PATCH 10/23] move config to ts file --- contracts/.env-sample | 5 +- contracts/scripts/common.ts | 35 ++- contracts/scripts/files/config.ts | 222 ++++++++++++++++++ contracts/scripts/files/localConfig.json | 51 ---- .../scripts/files/localDeployedContracts.json | 2 - contracts/scripts/files/localNetwork.json | 53 ----- contracts/scripts/files/mainnetConfig.json | 63 ----- .../files/mainnetDeployedContracts.json | 1 - contracts/scripts/files/novaConfig.json | 53 ----- .../scripts/files/novaDeployedContracts.json | 1 - contracts/scripts/files/sepoliaConfig.json | 53 ----- .../files/sepoliaDeployedContracts.json | 1 - contracts/scripts/populateLookup.ts | 21 +- contracts/scripts/prepareBoldUpgrade.ts | 19 +- .../scripts/testLocalExecuteBoldUpgrade.ts | 31 ++- 15 files changed, 286 insertions(+), 325 deletions(-) create mode 100644 contracts/scripts/files/config.ts delete mode 100644 contracts/scripts/files/localConfig.json delete mode 100644 contracts/scripts/files/localDeployedContracts.json delete mode 100644 contracts/scripts/files/localNetwork.json delete mode 100644 contracts/scripts/files/mainnetConfig.json delete mode 100644 contracts/scripts/files/mainnetDeployedContracts.json delete mode 100644 contracts/scripts/files/novaConfig.json delete mode 100644 contracts/scripts/files/novaDeployedContracts.json delete mode 100644 contracts/scripts/files/sepoliaConfig.json delete mode 100644 contracts/scripts/files/sepoliaDeployedContracts.json diff --git a/contracts/.env-sample b/contracts/.env-sample index e87d92745..3a1bea4ad 100644 --- a/contracts/.env-sample +++ b/contracts/.env-sample @@ -1,5 +1,4 @@ L1_RPC_URL="http://localhost:8545" L1_PRIV_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" -EXECUTOR="0xE6841D92B0C345144506576eC13ECf5103aC7f49" # for the upgrade test, address that can call the upgrade executor -CONFIG_LOCATION="./scripts/files/mainnetConfig.json" -DEPLOYED_CONTRACTS_LOCATION="./scripts/files/mainnetDeployedContracts.json" +CONFIG_NETWORK_NAME="arb1" +DEPLOYED_CONTRACTS_DIR="./scripts/files/" diff --git a/contracts/scripts/common.ts b/contracts/scripts/common.ts index e10373c89..e8d51b460 100644 --- a/contracts/scripts/common.ts +++ b/contracts/scripts/common.ts @@ -1,6 +1,9 @@ -import { BigNumber, providers } from 'ethers' +import { BigNumber, BigNumberish, providers } from 'ethers' import { parseEther } from 'ethers/lib/utils' import fs from 'fs' + +import { allConfigs } from './files/config' + export interface DeployedContracts { bridge: string seqInbox: string @@ -26,11 +29,15 @@ export const getJsonFile = (fileLocation: string) => { } export const getConfig = async ( - configLocation: string, + configName: string, l1Rpc: providers.Provider ): Promise => { - const config = getJsonFile(configLocation) as RawConfig - return await validateConfig(config, l1Rpc) + const config = allConfigs[configName] + if (!config) { + throw new Error('config not found') + } + await validateConfig(config, l1Rpc) + return config } export interface Config { @@ -56,8 +63,8 @@ export interface Config { confirmPeriodBlocks: number challengePeriodBlocks: number stakeToken: string - stakeAmt: BigNumber - miniStakeAmounts: BigNumber[] + stakeAmt: BigNumberish + miniStakeAmounts: BigNumberish[] chainId: number anyTrustFastConfirmer: string disableValidatorWhitelist: boolean @@ -84,9 +91,9 @@ export type RawConfig = Omit & { } export const validateConfig = async ( - config: RawConfig, + config: Config, l1Rpc: providers.Provider -): Promise => { +) => { // check all the config.contracts exist if ((await l1Rpc.getCode(config.contracts.l1Timelock)).length <= 2) { throw new Error('l1Timelock address is not a contract') @@ -160,20 +167,8 @@ export const validateConfig = async ( if (miniStakeAmounts.length !== config.settings.numBigStepLevel + 2) { throw new Error('miniStakeAmts length is not numBigStepLevel + 2') } - if (miniStakeAmounts.some((amt) => amt.lt(parseEther('0.1')))) { - throw new Error('miniStakeAmt is less than 0.1 eth') - } if (config.validators.length == 0) { throw new Error('no validators') } - - return { - ...config, - settings: { - ...config.settings, - stakeAmt: stakeAmount, - miniStakeAmounts, - }, - } } diff --git a/contracts/scripts/files/config.ts b/contracts/scripts/files/config.ts new file mode 100644 index 000000000..8787cb14d --- /dev/null +++ b/contracts/scripts/files/config.ts @@ -0,0 +1,222 @@ +import { Config } from '../common' +import { parseEther } from 'ethers/lib/utils' + +export const allConfigs: { [key: string]: Config } = { + // Arbitrum One Configuration + arb1: { + contracts: { + // the l1Timelock does not actually need to be the timelock + // it is only used to set the excess stake receiver / loser stake escrow + // TODO: change this to a fee router before real deployment + l1Timelock: '0xE6841D92B0C345144506576eC13ECf5103aC7f49', + rollup: '0x5eF0D09d1E6204141B4d37530808eD19f60FBa35', + bridge: '0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a', + sequencerInbox: '0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6', + rollupEventInbox: '0x57Bd336d579A51938619271a7Cc137a46D0501B1', + outbox: '0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840', + inbox: '0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f', + upgradeExecutor: '0x3ffFbAdAF827559da092217e474760E2b2c3CeDd', + }, + proxyAdmins: { + outbox: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', + inbox: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', + bridge: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', + rei: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', + seqInbox: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', + }, + settings: { + challengeGracePeriodBlocks: 14400, // 2 days + confirmPeriodBlocks: 45818, // same as old rollup, ~6.4 days + challengePeriodBlocks: 45818, // same as confirm period + stakeToken: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH + stakeAmt: parseEther('3600'), + miniStakeAmounts: ['0', parseEther('555'), parseEther('79')], + chainId: 42161, + anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', + disableValidatorWhitelist: true, + blockLeafSize: 1048576, // todo below + bigStepLeafSize: 512, + smallStepLeafSize: 128, + numBigStepLevel: 1, + maxDataSize: 117964, + isDelayBufferable: true, + bufferConfig: { + max: 14400, + threshold: 300, + replenishRateInBasis: 500, + }, + }, + validators: [ + '0x0ff813f6bd577c3d1cdbe435bac0621be6ae34b4', + '0x54c0d3d6c101580db3be8763a2ae2c6bb9dc840c', + '0x56d83349c2b8dcf74d7e92d5b6b33d0badd52d78', + '0x610aa279989f440820e14248bd3879b148717974', + '0x6fb914de4653ec5592b7c15f4d9466cbd03f2104', + '0x758c6bb08b3ea5889b5cddbdef9a45b3a983c398', + '0x7cf3d537733f6ba4183a833c9b021265716ce9d0', + '0x83215480db2c6a7e56f9e99ef93ab9b36f8a3dd5', + '0xab1a39332e934300ebcc57b5f95ca90631a347ff', + '0xb0cb1384e3f4a9a9b2447e39b05e10631e1d34b0', + '0xddf2f71ab206c0138a8eceeb54386567d5abf01e', + '0xf59caf75e8a4bfba4e6e07ad86c7e498e4d2519b', + '0xf8d3e1cf58386c92b27710c6a0d8a54c76bc6ab5', + ], + }, + // Arbitrum Nova Configuration + nova: { + contracts: { + l1Timelock: '0xE6841D92B0C345144506576eC13ECf5103aC7f49', + rollup: '0xFb209827c58283535b744575e11953DCC4bEAD88', + bridge: '0xC1Ebd02f738644983b6C4B2d440b8e77DdE276Bd', + sequencerInbox: '0x211E1c4c7f1bF5351Ac850Ed10FD68CFfCF6c21b', + rollupEventInbox: '0x304807A7ed6c1296df2128E6ff3836e477329CD2', + outbox: '0xD4B80C3D7240325D18E645B49e6535A3Bf95cc58', + inbox: '0xc4448b71118c9071Bcb9734A0EAc55D18A153949', + upgradeExecutor: '0x3ffFbAdAF827559da092217e474760E2b2c3CeDd', + }, + proxyAdmins: { + outbox: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', + inbox: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', + bridge: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', + rei: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', + seqInbox: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', + }, + settings: { + challengeGracePeriodBlocks: 14400, + confirmPeriodBlocks: 50400, + challengePeriodBlocks: 51600, + stakeToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + stakeAmt: '100000000000000000000', + miniStakeAmounts: [ + '6000000000000000000', + '5000000000000000000', + '4000000000000000000', + '3000000000000000000', + '2000000000000000000', + '1000000000000000000', + ], + chainId: 42161, + anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', + disableValidatorWhitelist: false, + blockLeafSize: 1048576, + bigStepLeafSize: 512, + smallStepLeafSize: 128, + numBigStepLevel: 4, + maxDataSize: 117964, + isDelayBufferable: true, + bufferConfig: { + max: 14400, + threshold: 300, + replenishRateInBasis: 500, + }, + }, + validators: [ + '0xE27d4Ed355e5273A3D4855c8e11BC4a8d3e39b87', + '0x57004b440Cc4eb2FEd8c4d1865FaC907F9150C76', + '0x24ca61c31c7f9af3ab104db6b9a444f28e9071e3', + ], + }, + // Arbitrum Sepolia Configuration + sepolia: { + contracts: { + l1Timelock: '0x6EC62D826aDc24AeA360be9cF2647c42b9Cdb19b', + rollup: '0xd80810638dbDF9081b72C1B33c65375e807281C8', + bridge: '0x38f918D0E9F1b721EDaA41302E399fa1B79333a9', + sequencerInbox: '0x6c97864CE4bEf387dE0b3310A44230f7E3F1be0D', + rollupEventInbox: '0xD5B196dd7EC4D823ff5F695536c61f7c8E642B94', + outbox: '0x65f07C7D521164a4d5DaC6eB8Fac8DA067A3B78F', + inbox: '0xaAe29B0366299461418F5324a79Afc425BE5ae21', + upgradeExecutor: '0x5FEe78FE9AD96c1d8557C6D6BB22Eb5A61eeD315', + }, + proxyAdmins: { + outbox: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', + inbox: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', + bridge: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', + rei: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', + seqInbox: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', + }, + settings: { + challengeGracePeriodBlocks: 14400, + confirmPeriodBlocks: 50400, + challengePeriodBlocks: 51600, + stakeToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + stakeAmt: '100000000000000000000', + miniStakeAmounts: [ + '6000000000000000000', + '5000000000000000000', + '4000000000000000000', + '3000000000000000000', + '2000000000000000000', + '1000000000000000000', + ], + chainId: 42161, + anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', + disableValidatorWhitelist: false, + blockLeafSize: 1048576, + bigStepLeafSize: 512, + smallStepLeafSize: 128, + numBigStepLevel: 4, + maxDataSize: 117964, + isDelayBufferable: true, + bufferConfig: { + max: 14400, + threshold: 300, + replenishRateInBasis: 500, + }, + }, + validators: [ + '0x8a8f0a24d7e58a76FC8F77bb68C7c902b91e182e', + '0x87630025E63A30eCf9Ca9d580d9D95922Fea6aF0', + '0xC32B93e581db6EBc50C08ce381143A259B92f1ED', + ], + }, + local: { + contracts: { + bridge: '0x5eCF728ffC5C5E802091875f96281B5aeECf6C49', + inbox: '0x9f8c1c641336A371031499e3c362e40d58d0f254', + outbox: '0x50143333b44Ea46255BEb67255C9Afd35551072F', + rollup: '0xC3124dD1FA0e5D6135c25279760DBF9d9286467B', + sequencerInbox: '0x18d19C5d3E685f5be5b9C86E097f0E439285D216', + rollupEventInbox: '0x0e73faf857e1ca53e700856fcf19f31f920a1e3c', + upgradeExecutor: '0x513d9f96d4d0563debae8a0dc307ea0e46b10ed7', + l1Timelock: '0xC3124dD1FA0e5D6135c25279760DBF9d9286467B', + }, + proxyAdmins: { + outbox: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', + inbox: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', + bridge: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', + rei: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', + seqInbox: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', + }, + settings: { + challengeGracePeriodBlocks: 10, + confirmPeriodBlocks: 100, + challengePeriodBlocks: 110, + stakeToken: '0x408Da76E87511429485C32E4Ad647DD14823Fdc4', + stakeAmt: '100000000000000000000', + miniStakeAmounts: [ + '6000000000000000000', + '5000000000000000000', + '4000000000000000000', + '3000000000000000000', + '2000000000000000000', + '1000000000000000000', + ], + chainId: 412346, + anyTrustFastConfirmer: '0x6d903f6003cca6255D85CcA4D3B5E5146dC33925', + disableValidatorWhitelist: true, + blockLeafSize: 1048576, + bigStepLeafSize: 512, + smallStepLeafSize: 128, + numBigStepLevel: 4, + maxDataSize: 117964, + isDelayBufferable: true, + bufferConfig: { + max: 14400, + threshold: 300, + replenishRateInBasis: 500, + }, + }, + validators: ['0xf10EF80c6eF4930A62C5F9661c91339Df4dBB173'], + }, +} diff --git a/contracts/scripts/files/localConfig.json b/contracts/scripts/files/localConfig.json deleted file mode 100644 index e434c3fed..000000000 --- a/contracts/scripts/files/localConfig.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "contracts": { - "bridge": "0x5eCF728ffC5C5E802091875f96281B5aeECf6C49", - "inbox": "0x9f8c1c641336A371031499e3c362e40d58d0f254", - "outbox": "0x50143333b44Ea46255BEb67255C9Afd35551072F", - "rollup": "0xC3124dD1FA0e5D6135c25279760DBF9d9286467B", - "sequencerInbox": "0x18d19C5d3E685f5be5b9C86E097f0E439285D216", - "rollupEventInbox": "0x0e73faf857e1ca53e700856fcf19f31f920a1e3c", - "upgradeExecutor": "0x513d9f96d4d0563debae8a0dc307ea0e46b10ed7", - "l1Timelock": "0xC3124dD1FA0e5D6135c25279760DBF9d9286467B" - }, - "proxyAdmins": { - "outbox": "0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3", - "inbox": "0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3", - "bridge": "0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3", - "rei": "0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3", - "seqInbox": "0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3" - }, - "settings": { - "challengeGracePeriodBlocks": 10, - "confirmPeriodBlocks": 100, - "challengePeriodBlocks": 110, - "stakeToken": "0x408Da76E87511429485C32E4Ad647DD14823Fdc4", - "stakeAmt": "100000000000000000000", - "miniStakeAmounts": [ - "6000000000000000000", - "5000000000000000000", - "4000000000000000000", - "3000000000000000000", - "2000000000000000000", - "1000000000000000000" - ], - "chainId": 412346, - "anyTrustFastConfirmer": "0x6d903f6003cca6255D85CcA4D3B5E5146dC33925", - "disableValidatorWhitelist": true, - "blockLeafSize": 1048576, - "bigStepLeafSize": 512, - "smallStepLeafSize": 128, - "numBigStepLevel": 4, - "maxDataSize": 117964, - "isDelayBufferable": true, - "bufferConfig": { - "max": 14400, - "threshold": 300, - "replenishRateInBasis": 500 - } - }, - "validators": [ - "0xf10EF80c6eF4930A62C5F9661c91339Df4dBB173" - ] -} \ No newline at end of file diff --git a/contracts/scripts/files/localDeployedContracts.json b/contracts/scripts/files/localDeployedContracts.json deleted file mode 100644 index 7a73a41bf..000000000 --- a/contracts/scripts/files/localDeployedContracts.json +++ /dev/null @@ -1,2 +0,0 @@ -{ -} \ No newline at end of file diff --git a/contracts/scripts/files/localNetwork.json b/contracts/scripts/files/localNetwork.json deleted file mode 100644 index 4b1c7d4b0..000000000 --- a/contracts/scripts/files/localNetwork.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "l1Network": { - "blockTime": 10, - "chainID": 1337, - "explorerUrl": "", - "isCustom": true, - "name": "EthLocal", - "partnerChainIDs": [ - 412346 - ], - "isArbitrum": false - }, - "l2Network": { - "chainID": 412346, - "confirmPeriodBlocks": 20, - "ethBridge": { - "bridge": "0x9B4477cAD544fB092B1Bc551d88465f7F13a443F", - "inbox": "0xa5d8d368c4Fc06D71724d91561d6F2a880FD4fD9", - "outbox": "0xbBaAB28Ad701e822148411376975cca7E02323d7", - "rollup": "0x9c14dfd8e5c262f9652e78f2b0a13389ee41d717", - "sequencerInbox": "0xD2B20a3B8C1d97A64eFA1120D3339d87841ccAE1" - }, - "explorerUrl": "", - "isArbitrum": true, - "isCustom": true, - "name": "ArbLocal", - "partnerChainID": 1337, - "retryableLifetimeSeconds": 604800, - "nitroGenesisBlock": 0, - "nitroGenesisL1Block": 0, - "depositTimeout": 900000, - "tokenBridge": { - "l1CustomGateway": "0x1c924636933ceDE03245f19756662e92F851293D", - "l1ERC20Gateway": "0xeBef8abC1DF5853345f319D5ACcba1d01AECCBD8", - "l1GatewayRouter": "0x932Af0F51E02a8b371d00E7448Eb6e91c013274d", - "l1MultiCall": "0x4De74F7B2a30a1Ee39b374f6F11859c334234A79", - "l1ProxyAdmin": "0xFFB9cE193d5FE12360f47a93A97d72da65c35019", - "l1Weth": "0x525c2aBA45F66987217323E8a05EA400C65D06DC", - "l1WethGateway": "0x1990703B7C717008F34d5088C2838c07B6C6e97b", - "l2CustomGateway": "0xD53b0E696c16520308186bB7c64E3dE85be45Ab9", - "l2ERC20Gateway": "0x7e6C3A78da71Ed7d6f9D3f155C5756fB1129E19c", - "l2GatewayRouter": "0x614234364127E3D5De331A9f2cBeFaE6869168eB", - "l2Multicall": "0x9815277063378fa7dE6E9a8159181b2fd44d7956", - "l2ProxyAdmin": "0x1bd440c4b2361ac11c20b5CB2409e64cB82DDb30", - "l2Weth": "0x9ffAd12EE17abF43a060760f3d93932a3DE5EB72", - "l2WethGateway": "0xf2Ec70e05fab34580B26890544dF2fF04dc63521" - }, - "partnerChainIDs": [], - "blockTime": 0.25 - }, - "l1TokenBridgeCreator": "0x3DF948c956e14175f43670407d5796b95Bb219D8", - "retryableSender": "0xF5FfD11A55AFD39377411Ab9856474D2a7Cb697e" -} \ No newline at end of file diff --git a/contracts/scripts/files/mainnetConfig.json b/contracts/scripts/files/mainnetConfig.json deleted file mode 100644 index adf845499..000000000 --- a/contracts/scripts/files/mainnetConfig.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "contracts": { - "l1Timelock": "0xE6841D92B0C345144506576eC13ECf5103aC7f49", - "rollup": "0x5eF0D09d1E6204141B4d37530808eD19f60FBa35", - "bridge": "0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a", - "sequencerInbox": "0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6", - "rollupEventInbox": "0x57Bd336d579A51938619271a7Cc137a46D0501B1", - "outbox": "0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840", - "inbox": "0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f", - "upgradeExecutor": "0x3ffFbAdAF827559da092217e474760E2b2c3CeDd" - }, - "proxyAdmins": { - "outbox": "0x554723262467f125ac9e1cdfa9ce15cc53822dbd", - "inbox": "0x554723262467f125ac9e1cdfa9ce15cc53822dbd", - "bridge": "0x554723262467f125ac9e1cdfa9ce15cc53822dbd", - "rei": "0x554723262467f125ac9e1cdfa9ce15cc53822dbd", - "seqInbox": "0x554723262467f125ac9e1cdfa9ce15cc53822dbd" - }, - "settings": { - "challengeGracePeriodBlocks": 14400, - "confirmPeriodBlocks": 50400, - "challengePeriodBlocks": 51600, - "stakeToken": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "stakeAmt": "100000000000000000000", - "miniStakeAmounts": [ - "6000000000000000000", - "5000000000000000000", - "4000000000000000000", - "3000000000000000000", - "2000000000000000000", - "1000000000000000000" - ], - "chainId": 42161, - "anyTrustFastConfirmer": "0x0000000000000000000000000000000000000000", - "disableValidatorWhitelist": false, - "blockLeafSize": 1048576, - "bigStepLeafSize": 512, - "smallStepLeafSize": 128, - "numBigStepLevel": 4, - "maxDataSize": 117964, - "isDelayBufferable": true, - "bufferConfig": { - "max": 14400, - "threshold": 300, - "replenishRateInBasis": 500 - } - }, - "validators": [ - "0x0ff813f6bd577c3d1cdbe435bac0621be6ae34b4", - "0x54c0d3d6c101580db3be8763a2ae2c6bb9dc840c", - "0x56d83349c2b8dcf74d7e92d5b6b33d0badd52d78", - "0x610aa279989f440820e14248bd3879b148717974", - "0x6fb914de4653ec5592b7c15f4d9466cbd03f2104", - "0x758c6bb08b3ea5889b5cddbdef9a45b3a983c398", - "0x7cf3d537733f6ba4183a833c9b021265716ce9d0", - "0x83215480db2c6a7e56f9e99ef93ab9b36f8a3dd5", - "0xab1a39332e934300ebcc57b5f95ca90631a347ff", - "0xb0cb1384e3f4a9a9b2447e39b05e10631e1d34b0", - "0xddf2f71ab206c0138a8eceeb54386567d5abf01e", - "0xf59caf75e8a4bfba4e6e07ad86c7e498e4d2519b", - "0xf8d3e1cf58386c92b27710c6a0d8a54c76bc6ab5" - ] -} diff --git a/contracts/scripts/files/mainnetDeployedContracts.json b/contracts/scripts/files/mainnetDeployedContracts.json deleted file mode 100644 index 9e26dfeeb..000000000 --- a/contracts/scripts/files/mainnetDeployedContracts.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/contracts/scripts/files/novaConfig.json b/contracts/scripts/files/novaConfig.json deleted file mode 100644 index 5da09910a..000000000 --- a/contracts/scripts/files/novaConfig.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "contracts": { - "l1Timelock": "0xE6841D92B0C345144506576eC13ECf5103aC7f49", - "rollup": "0xFb209827c58283535b744575e11953DCC4bEAD88", - "bridge": "0xC1Ebd02f738644983b6C4B2d440b8e77DdE276Bd", - "sequencerInbox": "0x211E1c4c7f1bF5351Ac850Ed10FD68CFfCF6c21b", - "rollupEventInbox": "0x304807A7ed6c1296df2128E6ff3836e477329CD2", - "outbox": "0xD4B80C3D7240325D18E645B49e6535A3Bf95cc58", - "inbox": "0xc4448b71118c9071Bcb9734A0EAc55D18A153949", - "upgradeExecutor": "0x3ffFbAdAF827559da092217e474760E2b2c3CeDd" - }, - "proxyAdmins": { - "outbox": "0x71d78dc7ccc0e037e12de1e50f5470903ce37148", - "inbox": "0x71d78dc7ccc0e037e12de1e50f5470903ce37148", - "bridge": "0x71d78dc7ccc0e037e12de1e50f5470903ce37148", - "rei": "0x71d78dc7ccc0e037e12de1e50f5470903ce37148", - "seqInbox": "0x71d78dc7ccc0e037e12de1e50f5470903ce37148" - }, - "settings": { - "challengeGracePeriodBlocks": 14400, - "confirmPeriodBlocks": 50400, - "challengePeriodBlocks": 51600, - "stakeToken": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "stakeAmt": "100000000000000000000", - "miniStakeAmounts": [ - "6000000000000000000", - "5000000000000000000", - "4000000000000000000", - "3000000000000000000", - "2000000000000000000", - "1000000000000000000" - ], - "chainId": 42161, - "anyTrustFastConfirmer": "0x0000000000000000000000000000000000000000", - "disableValidatorWhitelist": false, - "blockLeafSize": 1048576, - "bigStepLeafSize": 512, - "smallStepLeafSize": 128, - "numBigStepLevel": 4, - "maxDataSize": 117964, - "isDelayBufferable": true, - "bufferConfig": { - "max": 14400, - "threshold": 300, - "replenishRateInBasis": 500 - } - }, - "validators": [ - "0xE27d4Ed355e5273A3D4855c8e11BC4a8d3e39b87", - "0x57004b440Cc4eb2FEd8c4d1865FaC907F9150C76", - "0x24ca61c31c7f9af3ab104db6b9a444f28e9071e3" - ] -} diff --git a/contracts/scripts/files/novaDeployedContracts.json b/contracts/scripts/files/novaDeployedContracts.json deleted file mode 100644 index 9e26dfeeb..000000000 --- a/contracts/scripts/files/novaDeployedContracts.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/contracts/scripts/files/sepoliaConfig.json b/contracts/scripts/files/sepoliaConfig.json deleted file mode 100644 index 22b97aeb4..000000000 --- a/contracts/scripts/files/sepoliaConfig.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "contracts": { - "l1Timelock": "0x6EC62D826aDc24AeA360be9cF2647c42b9Cdb19b", - "rollup": "0xd80810638dbDF9081b72C1B33c65375e807281C8", - "bridge": "0x38f918D0E9F1b721EDaA41302E399fa1B79333a9", - "sequencerInbox": "0x6c97864CE4bEf387dE0b3310A44230f7E3F1be0D", - "rollupEventInbox": "0xD5B196dd7EC4D823ff5F695536c61f7c8E642B94", - "outbox": "0x65f07C7D521164a4d5DaC6eB8Fac8DA067A3B78F", - "inbox": "0xaAe29B0366299461418F5324a79Afc425BE5ae21", - "upgradeExecutor": "0x5FEe78FE9AD96c1d8557C6D6BB22Eb5A61eeD315" - }, - "proxyAdmins": { - "outbox": "0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8", - "inbox": "0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8", - "bridge": "0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8", - "rei": "0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8", - "seqInbox": "0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8" - }, - "settings": { - "challengeGracePeriodBlocks": 14400, - "confirmPeriodBlocks": 50400, - "challengePeriodBlocks": 51600, - "stakeToken": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "stakeAmt": "100000000000000000000", - "miniStakeAmounts": [ - "6000000000000000000", - "5000000000000000000", - "4000000000000000000", - "3000000000000000000", - "2000000000000000000", - "1000000000000000000" - ], - "chainId": 42161, - "anyTrustFastConfirmer": "0x0000000000000000000000000000000000000000", - "disableValidatorWhitelist": false, - "blockLeafSize": 1048576, - "bigStepLeafSize": 512, - "smallStepLeafSize": 128, - "numBigStepLevel": 4, - "maxDataSize": 117964, - "isDelayBufferable": true, - "bufferConfig": { - "max": 14400, - "threshold": 300, - "replenishRateInBasis": 500 - } - }, - "validators": [ - "0x8a8f0a24d7e58a76FC8F77bb68C7c902b91e182e", - "0x87630025E63A30eCf9Ca9d580d9D95922Fea6aF0", - "0xC32B93e581db6EBc50C08ce381143A259B92f1ED" - ] -} diff --git a/contracts/scripts/files/sepoliaDeployedContracts.json b/contracts/scripts/files/sepoliaDeployedContracts.json deleted file mode 100644 index 9e26dfeeb..000000000 --- a/contracts/scripts/files/sepoliaDeployedContracts.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/contracts/scripts/populateLookup.ts b/contracts/scripts/populateLookup.ts index 615d14c83..c13015d16 100644 --- a/contracts/scripts/populateLookup.ts +++ b/contracts/scripts/populateLookup.ts @@ -2,6 +2,7 @@ import { ethers, Wallet } from 'ethers' import { DeployedContracts, getConfig, getJsonFile } from './common' import { populateLookup } from './boldUpgradeFunctions' import dotenv from 'dotenv' +import path from 'path' dotenv.config() @@ -18,22 +19,26 @@ async function main() { } const wallet = new Wallet(l1PrivKey, l1Rpc) - const configLocation = process.env.CONFIG_LOCATION - if (!configLocation) { - throw new Error('CONFIG_LOCATION env variable not set') + const configNetworkName = process.env.CONFIG_NETWORK_NAME + if (!configNetworkName) { + throw new Error('CONFIG_NETWORK_NAME env variable not set') } - const config = await getConfig(configLocation, l1Rpc) + const config = await getConfig(configNetworkName, l1Rpc) - const deployedContractsLocation = process.env.DEPLOYED_CONTRACTS_LOCATION - if (!deployedContractsLocation) { - throw new Error('DEPLOYED_CONTRACTS_LOCATION env variable not set') + const deployedContractsDir = process.env.DEPLOYED_CONTRACTS_DIR + if (!deployedContractsDir) { + throw new Error('DEPLOYED_CONTRACTS_DIR env variable not set') } + const deployedContractsLocation = path.join( + deployedContractsDir, + configNetworkName + 'DeployedContracts.json' + ) const deployedContracts = getJsonFile( deployedContractsLocation ) as DeployedContracts if (!deployedContracts?.preImageHashLookup) { throw new Error( - 'preImageHashLookup not found in DEPLOYED_CONTRACTS_LOCATION' + 'preImageHashLookup not found in ' + deployedContractsLocation ) } diff --git a/contracts/scripts/prepareBoldUpgrade.ts b/contracts/scripts/prepareBoldUpgrade.ts index 51171d63d..4477ed846 100644 --- a/contracts/scripts/prepareBoldUpgrade.ts +++ b/contracts/scripts/prepareBoldUpgrade.ts @@ -7,6 +7,7 @@ import { } from './common' import { deployBoldUpgrade } from './boldUpgradeFunctions' import dotenv from 'dotenv' +import path from 'path' dotenv.config() @@ -23,16 +24,20 @@ async function main() { } const wallet = new Wallet(l1PrivKey, l1Rpc) - const configLocation = process.env.CONFIG_LOCATION - if (!configLocation) { - throw new Error('CONFIG_LOCATION env variable not set') + const configNetworkName = process.env.CONFIG_NETWORK_NAME + if (!configNetworkName) { + throw new Error('CONFIG_NETWORK_NAME env variable not set') } - const config = await getConfig(configLocation, l1Rpc) + const config = await getConfig(configNetworkName, l1Rpc) - const deployedContractsLocation = process.env.DEPLOYED_CONTRACTS_LOCATION - if (!deployedContractsLocation) { - throw new Error('DEPLOYED_CONTRACTS_LOCATION env variable not set') + const deployedContractsDir = process.env.DEPLOYED_CONTRACTS_DIR + if (!deployedContractsDir) { + throw new Error('DEPLOYED_CONTRACTS_DIR env variable not set') } + const deployedContractsLocation = path.join( + deployedContractsDir, + configNetworkName + 'DeployedContracts.json' + ) // if the deployed contracts exists then we load it and combine // if not, then we just use the newly created item diff --git a/contracts/scripts/testLocalExecuteBoldUpgrade.ts b/contracts/scripts/testLocalExecuteBoldUpgrade.ts index bea4d8250..24c5aab7a 100644 --- a/contracts/scripts/testLocalExecuteBoldUpgrade.ts +++ b/contracts/scripts/testLocalExecuteBoldUpgrade.ts @@ -19,6 +19,7 @@ import { RollupMigratedEvent } from '../build/types/src/rollup/BOLDUpgradeAction import { abi as OldRollupAbi } from './files/OldRollupUserLogic.json' import { JsonRpcProvider } from '@ethersproject/providers' import { getAddress } from 'ethers/lib/utils' +import path from 'path' dotenv.config() @@ -32,6 +33,13 @@ type VerificationParams = { receipt: ContractReceipt } +const executors: {[key: string]: string} = { + // DAO L1 Timelocks + arb1: '0xE6841D92B0C345144506576eC13ECf5103aC7f49', + nova: '0xE6841D92B0C345144506576eC13ECf5103aC7f49', + sepolia: '0x6EC62D826aDc24AeA360be9cF2647c42b9Cdb19b' +} + async function getPreUpgradeState(l1Rpc: JsonRpcProvider, config: Config) { const oldRollupContract = new Contract( config.contracts.rollup, @@ -64,9 +72,9 @@ async function perform( config: Config, deployedContracts: DeployedContracts ) { - const executor = process.env.EXECUTOR + const executor = executors[process.env.CONFIG_NETWORK_NAME!] if (!executor) { - throw new Error('EXECUTOR env variable not set') + throw new Error('no executor found for CONFIG_NETWORK_NAME or CONFIG_NETWORK_NAME not set') } await l1Rpc.send('hardhat_impersonateAccount', [executor]) @@ -593,15 +601,20 @@ async function main() { l1RpcVal ) as JsonRpcProvider - const deployedContractsLocation = process.env.DEPLOYED_CONTRACTS_LOCATION - if (!deployedContractsLocation) { - throw new Error('DEPLOYED_CONTRACTS_LOCATION env variable not set') + const configNetworkName = process.env.CONFIG_NETWORK_NAME + if (!configNetworkName) { + throw new Error('CONFIG_NETWORK_NAME env variable not set') } - const configLocation = process.env.CONFIG_LOCATION - if (!configLocation) { - throw new Error('CONFIG_LOCATION env variable not set') + const config = await getConfig(configNetworkName, l1Rpc) + + const deployedContractsDir = process.env.DEPLOYED_CONTRACTS_DIR + if (!deployedContractsDir) { + throw new Error('DEPLOYED_CONTRACTS_DIR env variable not set') } - const config = await getConfig(configLocation, l1Rpc) + const deployedContractsLocation = path.join( + deployedContractsDir, + configNetworkName + 'DeployedContracts.json' + ) const deployedContracts = getJsonFile( deployedContractsLocation From 1643ea909e233384ca6cbb25563f28d671401d2a Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Wed, 12 Jun 2024 17:05:16 -0400 Subject: [PATCH 11/23] separate config files --- contracts/scripts/common.ts | 4 +- contracts/scripts/files/config.ts | 222 --------------------- contracts/scripts/files/configs/arb1.ts | 62 ++++++ contracts/scripts/files/configs/index.ts | 11 + contracts/scripts/files/configs/local.ts | 51 +++++ contracts/scripts/files/configs/nova.ts | 55 +++++ contracts/scripts/files/configs/sepolia.ts | 55 +++++ 7 files changed, 236 insertions(+), 224 deletions(-) delete mode 100644 contracts/scripts/files/config.ts create mode 100644 contracts/scripts/files/configs/arb1.ts create mode 100644 contracts/scripts/files/configs/index.ts create mode 100644 contracts/scripts/files/configs/local.ts create mode 100644 contracts/scripts/files/configs/nova.ts create mode 100644 contracts/scripts/files/configs/sepolia.ts diff --git a/contracts/scripts/common.ts b/contracts/scripts/common.ts index e8d51b460..9e9fd9ae9 100644 --- a/contracts/scripts/common.ts +++ b/contracts/scripts/common.ts @@ -2,7 +2,7 @@ import { BigNumber, BigNumberish, providers } from 'ethers' import { parseEther } from 'ethers/lib/utils' import fs from 'fs' -import { allConfigs } from './files/config' +import { configs } from './files/configs' export interface DeployedContracts { bridge: string @@ -32,7 +32,7 @@ export const getConfig = async ( configName: string, l1Rpc: providers.Provider ): Promise => { - const config = allConfigs[configName] + const config = configs[configName] if (!config) { throw new Error('config not found') } diff --git a/contracts/scripts/files/config.ts b/contracts/scripts/files/config.ts deleted file mode 100644 index 8787cb14d..000000000 --- a/contracts/scripts/files/config.ts +++ /dev/null @@ -1,222 +0,0 @@ -import { Config } from '../common' -import { parseEther } from 'ethers/lib/utils' - -export const allConfigs: { [key: string]: Config } = { - // Arbitrum One Configuration - arb1: { - contracts: { - // the l1Timelock does not actually need to be the timelock - // it is only used to set the excess stake receiver / loser stake escrow - // TODO: change this to a fee router before real deployment - l1Timelock: '0xE6841D92B0C345144506576eC13ECf5103aC7f49', - rollup: '0x5eF0D09d1E6204141B4d37530808eD19f60FBa35', - bridge: '0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a', - sequencerInbox: '0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6', - rollupEventInbox: '0x57Bd336d579A51938619271a7Cc137a46D0501B1', - outbox: '0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840', - inbox: '0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f', - upgradeExecutor: '0x3ffFbAdAF827559da092217e474760E2b2c3CeDd', - }, - proxyAdmins: { - outbox: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', - inbox: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', - bridge: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', - rei: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', - seqInbox: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', - }, - settings: { - challengeGracePeriodBlocks: 14400, // 2 days - confirmPeriodBlocks: 45818, // same as old rollup, ~6.4 days - challengePeriodBlocks: 45818, // same as confirm period - stakeToken: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH - stakeAmt: parseEther('3600'), - miniStakeAmounts: ['0', parseEther('555'), parseEther('79')], - chainId: 42161, - anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', - disableValidatorWhitelist: true, - blockLeafSize: 1048576, // todo below - bigStepLeafSize: 512, - smallStepLeafSize: 128, - numBigStepLevel: 1, - maxDataSize: 117964, - isDelayBufferable: true, - bufferConfig: { - max: 14400, - threshold: 300, - replenishRateInBasis: 500, - }, - }, - validators: [ - '0x0ff813f6bd577c3d1cdbe435bac0621be6ae34b4', - '0x54c0d3d6c101580db3be8763a2ae2c6bb9dc840c', - '0x56d83349c2b8dcf74d7e92d5b6b33d0badd52d78', - '0x610aa279989f440820e14248bd3879b148717974', - '0x6fb914de4653ec5592b7c15f4d9466cbd03f2104', - '0x758c6bb08b3ea5889b5cddbdef9a45b3a983c398', - '0x7cf3d537733f6ba4183a833c9b021265716ce9d0', - '0x83215480db2c6a7e56f9e99ef93ab9b36f8a3dd5', - '0xab1a39332e934300ebcc57b5f95ca90631a347ff', - '0xb0cb1384e3f4a9a9b2447e39b05e10631e1d34b0', - '0xddf2f71ab206c0138a8eceeb54386567d5abf01e', - '0xf59caf75e8a4bfba4e6e07ad86c7e498e4d2519b', - '0xf8d3e1cf58386c92b27710c6a0d8a54c76bc6ab5', - ], - }, - // Arbitrum Nova Configuration - nova: { - contracts: { - l1Timelock: '0xE6841D92B0C345144506576eC13ECf5103aC7f49', - rollup: '0xFb209827c58283535b744575e11953DCC4bEAD88', - bridge: '0xC1Ebd02f738644983b6C4B2d440b8e77DdE276Bd', - sequencerInbox: '0x211E1c4c7f1bF5351Ac850Ed10FD68CFfCF6c21b', - rollupEventInbox: '0x304807A7ed6c1296df2128E6ff3836e477329CD2', - outbox: '0xD4B80C3D7240325D18E645B49e6535A3Bf95cc58', - inbox: '0xc4448b71118c9071Bcb9734A0EAc55D18A153949', - upgradeExecutor: '0x3ffFbAdAF827559da092217e474760E2b2c3CeDd', - }, - proxyAdmins: { - outbox: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', - inbox: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', - bridge: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', - rei: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', - seqInbox: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', - }, - settings: { - challengeGracePeriodBlocks: 14400, - confirmPeriodBlocks: 50400, - challengePeriodBlocks: 51600, - stakeToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', - stakeAmt: '100000000000000000000', - miniStakeAmounts: [ - '6000000000000000000', - '5000000000000000000', - '4000000000000000000', - '3000000000000000000', - '2000000000000000000', - '1000000000000000000', - ], - chainId: 42161, - anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', - disableValidatorWhitelist: false, - blockLeafSize: 1048576, - bigStepLeafSize: 512, - smallStepLeafSize: 128, - numBigStepLevel: 4, - maxDataSize: 117964, - isDelayBufferable: true, - bufferConfig: { - max: 14400, - threshold: 300, - replenishRateInBasis: 500, - }, - }, - validators: [ - '0xE27d4Ed355e5273A3D4855c8e11BC4a8d3e39b87', - '0x57004b440Cc4eb2FEd8c4d1865FaC907F9150C76', - '0x24ca61c31c7f9af3ab104db6b9a444f28e9071e3', - ], - }, - // Arbitrum Sepolia Configuration - sepolia: { - contracts: { - l1Timelock: '0x6EC62D826aDc24AeA360be9cF2647c42b9Cdb19b', - rollup: '0xd80810638dbDF9081b72C1B33c65375e807281C8', - bridge: '0x38f918D0E9F1b721EDaA41302E399fa1B79333a9', - sequencerInbox: '0x6c97864CE4bEf387dE0b3310A44230f7E3F1be0D', - rollupEventInbox: '0xD5B196dd7EC4D823ff5F695536c61f7c8E642B94', - outbox: '0x65f07C7D521164a4d5DaC6eB8Fac8DA067A3B78F', - inbox: '0xaAe29B0366299461418F5324a79Afc425BE5ae21', - upgradeExecutor: '0x5FEe78FE9AD96c1d8557C6D6BB22Eb5A61eeD315', - }, - proxyAdmins: { - outbox: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', - inbox: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', - bridge: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', - rei: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', - seqInbox: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', - }, - settings: { - challengeGracePeriodBlocks: 14400, - confirmPeriodBlocks: 50400, - challengePeriodBlocks: 51600, - stakeToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', - stakeAmt: '100000000000000000000', - miniStakeAmounts: [ - '6000000000000000000', - '5000000000000000000', - '4000000000000000000', - '3000000000000000000', - '2000000000000000000', - '1000000000000000000', - ], - chainId: 42161, - anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', - disableValidatorWhitelist: false, - blockLeafSize: 1048576, - bigStepLeafSize: 512, - smallStepLeafSize: 128, - numBigStepLevel: 4, - maxDataSize: 117964, - isDelayBufferable: true, - bufferConfig: { - max: 14400, - threshold: 300, - replenishRateInBasis: 500, - }, - }, - validators: [ - '0x8a8f0a24d7e58a76FC8F77bb68C7c902b91e182e', - '0x87630025E63A30eCf9Ca9d580d9D95922Fea6aF0', - '0xC32B93e581db6EBc50C08ce381143A259B92f1ED', - ], - }, - local: { - contracts: { - bridge: '0x5eCF728ffC5C5E802091875f96281B5aeECf6C49', - inbox: '0x9f8c1c641336A371031499e3c362e40d58d0f254', - outbox: '0x50143333b44Ea46255BEb67255C9Afd35551072F', - rollup: '0xC3124dD1FA0e5D6135c25279760DBF9d9286467B', - sequencerInbox: '0x18d19C5d3E685f5be5b9C86E097f0E439285D216', - rollupEventInbox: '0x0e73faf857e1ca53e700856fcf19f31f920a1e3c', - upgradeExecutor: '0x513d9f96d4d0563debae8a0dc307ea0e46b10ed7', - l1Timelock: '0xC3124dD1FA0e5D6135c25279760DBF9d9286467B', - }, - proxyAdmins: { - outbox: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', - inbox: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', - bridge: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', - rei: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', - seqInbox: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', - }, - settings: { - challengeGracePeriodBlocks: 10, - confirmPeriodBlocks: 100, - challengePeriodBlocks: 110, - stakeToken: '0x408Da76E87511429485C32E4Ad647DD14823Fdc4', - stakeAmt: '100000000000000000000', - miniStakeAmounts: [ - '6000000000000000000', - '5000000000000000000', - '4000000000000000000', - '3000000000000000000', - '2000000000000000000', - '1000000000000000000', - ], - chainId: 412346, - anyTrustFastConfirmer: '0x6d903f6003cca6255D85CcA4D3B5E5146dC33925', - disableValidatorWhitelist: true, - blockLeafSize: 1048576, - bigStepLeafSize: 512, - smallStepLeafSize: 128, - numBigStepLevel: 4, - maxDataSize: 117964, - isDelayBufferable: true, - bufferConfig: { - max: 14400, - threshold: 300, - replenishRateInBasis: 500, - }, - }, - validators: ['0xf10EF80c6eF4930A62C5F9661c91339Df4dBB173'], - }, -} diff --git a/contracts/scripts/files/configs/arb1.ts b/contracts/scripts/files/configs/arb1.ts new file mode 100644 index 000000000..af8a524f6 --- /dev/null +++ b/contracts/scripts/files/configs/arb1.ts @@ -0,0 +1,62 @@ +import { parseEther } from "ethers/lib/utils"; +import { Config } from "../../common"; + +export const arb1: Config = { + contracts: { + // the l1Timelock does not actually need to be the timelock + // it is only used to set the excess stake receiver / loser stake escrow + // TODO: change this to a fee router before real deployment + l1Timelock: '0xE6841D92B0C345144506576eC13ECf5103aC7f49', + rollup: '0x5eF0D09d1E6204141B4d37530808eD19f60FBa35', + bridge: '0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a', + sequencerInbox: '0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6', + rollupEventInbox: '0x57Bd336d579A51938619271a7Cc137a46D0501B1', + outbox: '0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840', + inbox: '0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f', + upgradeExecutor: '0x3ffFbAdAF827559da092217e474760E2b2c3CeDd', + }, + proxyAdmins: { + outbox: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', + inbox: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', + bridge: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', + rei: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', + seqInbox: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', + }, + settings: { + challengeGracePeriodBlocks: 14400, // 2 days + confirmPeriodBlocks: 45818, // same as old rollup, ~6.4 days + challengePeriodBlocks: 45818, // same as confirm period + stakeToken: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH + stakeAmt: parseEther('3600'), + miniStakeAmounts: ['0', parseEther('555'), parseEther('79')], + chainId: 42161, + anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', + disableValidatorWhitelist: true, + blockLeafSize: 1048576, // todo below + bigStepLeafSize: 512, + smallStepLeafSize: 128, + numBigStepLevel: 1, + maxDataSize: 117964, + isDelayBufferable: true, + bufferConfig: { + max: 14400, + threshold: 300, + replenishRateInBasis: 500, + }, + }, + validators: [ + '0x0ff813f6bd577c3d1cdbe435bac0621be6ae34b4', + '0x54c0d3d6c101580db3be8763a2ae2c6bb9dc840c', + '0x56d83349c2b8dcf74d7e92d5b6b33d0badd52d78', + '0x610aa279989f440820e14248bd3879b148717974', + '0x6fb914de4653ec5592b7c15f4d9466cbd03f2104', + '0x758c6bb08b3ea5889b5cddbdef9a45b3a983c398', + '0x7cf3d537733f6ba4183a833c9b021265716ce9d0', + '0x83215480db2c6a7e56f9e99ef93ab9b36f8a3dd5', + '0xab1a39332e934300ebcc57b5f95ca90631a347ff', + '0xb0cb1384e3f4a9a9b2447e39b05e10631e1d34b0', + '0xddf2f71ab206c0138a8eceeb54386567d5abf01e', + '0xf59caf75e8a4bfba4e6e07ad86c7e498e4d2519b', + '0xf8d3e1cf58386c92b27710c6a0d8a54c76bc6ab5', + ], +} \ No newline at end of file diff --git a/contracts/scripts/files/configs/index.ts b/contracts/scripts/files/configs/index.ts new file mode 100644 index 000000000..ecd864a6c --- /dev/null +++ b/contracts/scripts/files/configs/index.ts @@ -0,0 +1,11 @@ +import { arb1 } from './arb1' +import { nova } from './nova' +import { sepolia } from './sepolia' +import { local } from './local' + +export const configs = { + arb1, + nova, + sepolia, + local, +} diff --git a/contracts/scripts/files/configs/local.ts b/contracts/scripts/files/configs/local.ts new file mode 100644 index 000000000..d3284bbaf --- /dev/null +++ b/contracts/scripts/files/configs/local.ts @@ -0,0 +1,51 @@ +import { Config } from "../../common"; + +export const local: Config = { + contracts: { + bridge: '0x5eCF728ffC5C5E802091875f96281B5aeECf6C49', + inbox: '0x9f8c1c641336A371031499e3c362e40d58d0f254', + outbox: '0x50143333b44Ea46255BEb67255C9Afd35551072F', + rollup: '0xC3124dD1FA0e5D6135c25279760DBF9d9286467B', + sequencerInbox: '0x18d19C5d3E685f5be5b9C86E097f0E439285D216', + rollupEventInbox: '0x0e73faf857e1ca53e700856fcf19f31f920a1e3c', + upgradeExecutor: '0x513d9f96d4d0563debae8a0dc307ea0e46b10ed7', + l1Timelock: '0xC3124dD1FA0e5D6135c25279760DBF9d9286467B', + }, + proxyAdmins: { + outbox: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', + inbox: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', + bridge: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', + rei: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', + seqInbox: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', + }, + settings: { + challengeGracePeriodBlocks: 10, + confirmPeriodBlocks: 100, + challengePeriodBlocks: 110, + stakeToken: '0x408Da76E87511429485C32E4Ad647DD14823Fdc4', + stakeAmt: '100000000000000000000', + miniStakeAmounts: [ + '6000000000000000000', + '5000000000000000000', + '4000000000000000000', + '3000000000000000000', + '2000000000000000000', + '1000000000000000000', + ], + chainId: 412346, + anyTrustFastConfirmer: '0x6d903f6003cca6255D85CcA4D3B5E5146dC33925', + disableValidatorWhitelist: true, + blockLeafSize: 1048576, + bigStepLeafSize: 512, + smallStepLeafSize: 128, + numBigStepLevel: 4, + maxDataSize: 117964, + isDelayBufferable: true, + bufferConfig: { + max: 14400, + threshold: 300, + replenishRateInBasis: 500, + }, + }, + validators: ['0xf10EF80c6eF4930A62C5F9661c91339Df4dBB173'], +} \ No newline at end of file diff --git a/contracts/scripts/files/configs/nova.ts b/contracts/scripts/files/configs/nova.ts new file mode 100644 index 000000000..9a85072d4 --- /dev/null +++ b/contracts/scripts/files/configs/nova.ts @@ -0,0 +1,55 @@ +import { Config } from "../../common"; + +export const nova: Config = { + contracts: { + l1Timelock: '0xE6841D92B0C345144506576eC13ECf5103aC7f49', + rollup: '0xFb209827c58283535b744575e11953DCC4bEAD88', + bridge: '0xC1Ebd02f738644983b6C4B2d440b8e77DdE276Bd', + sequencerInbox: '0x211E1c4c7f1bF5351Ac850Ed10FD68CFfCF6c21b', + rollupEventInbox: '0x304807A7ed6c1296df2128E6ff3836e477329CD2', + outbox: '0xD4B80C3D7240325D18E645B49e6535A3Bf95cc58', + inbox: '0xc4448b71118c9071Bcb9734A0EAc55D18A153949', + upgradeExecutor: '0x3ffFbAdAF827559da092217e474760E2b2c3CeDd', + }, + proxyAdmins: { + outbox: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', + inbox: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', + bridge: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', + rei: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', + seqInbox: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', + }, + settings: { + challengeGracePeriodBlocks: 14400, + confirmPeriodBlocks: 50400, + challengePeriodBlocks: 51600, + stakeToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + stakeAmt: '100000000000000000000', + miniStakeAmounts: [ + '6000000000000000000', + '5000000000000000000', + '4000000000000000000', + '3000000000000000000', + '2000000000000000000', + '1000000000000000000', + ], + chainId: 42161, + anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', + disableValidatorWhitelist: false, + blockLeafSize: 1048576, + bigStepLeafSize: 512, + smallStepLeafSize: 128, + numBigStepLevel: 4, + maxDataSize: 117964, + isDelayBufferable: true, + bufferConfig: { + max: 14400, + threshold: 300, + replenishRateInBasis: 500, + }, + }, + validators: [ + '0xE27d4Ed355e5273A3D4855c8e11BC4a8d3e39b87', + '0x57004b440Cc4eb2FEd8c4d1865FaC907F9150C76', + '0x24ca61c31c7f9af3ab104db6b9a444f28e9071e3', + ], +} \ No newline at end of file diff --git a/contracts/scripts/files/configs/sepolia.ts b/contracts/scripts/files/configs/sepolia.ts new file mode 100644 index 000000000..d056ca686 --- /dev/null +++ b/contracts/scripts/files/configs/sepolia.ts @@ -0,0 +1,55 @@ +import { Config } from "../../common"; + +export const sepolia: Config = { + contracts: { + l1Timelock: '0x6EC62D826aDc24AeA360be9cF2647c42b9Cdb19b', + rollup: '0xd80810638dbDF9081b72C1B33c65375e807281C8', + bridge: '0x38f918D0E9F1b721EDaA41302E399fa1B79333a9', + sequencerInbox: '0x6c97864CE4bEf387dE0b3310A44230f7E3F1be0D', + rollupEventInbox: '0xD5B196dd7EC4D823ff5F695536c61f7c8E642B94', + outbox: '0x65f07C7D521164a4d5DaC6eB8Fac8DA067A3B78F', + inbox: '0xaAe29B0366299461418F5324a79Afc425BE5ae21', + upgradeExecutor: '0x5FEe78FE9AD96c1d8557C6D6BB22Eb5A61eeD315', + }, + proxyAdmins: { + outbox: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', + inbox: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', + bridge: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', + rei: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', + seqInbox: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', + }, + settings: { + challengeGracePeriodBlocks: 14400, + confirmPeriodBlocks: 50400, + challengePeriodBlocks: 51600, + stakeToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + stakeAmt: '100000000000000000000', + miniStakeAmounts: [ + '6000000000000000000', + '5000000000000000000', + '4000000000000000000', + '3000000000000000000', + '2000000000000000000', + '1000000000000000000', + ], + chainId: 42161, + anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', + disableValidatorWhitelist: false, + blockLeafSize: 1048576, + bigStepLeafSize: 512, + smallStepLeafSize: 128, + numBigStepLevel: 4, + maxDataSize: 117964, + isDelayBufferable: true, + bufferConfig: { + max: 14400, + threshold: 300, + replenishRateInBasis: 500, + }, + }, + validators: [ + '0x8a8f0a24d7e58a76FC8F77bb68C7c902b91e182e', + '0x87630025E63A30eCf9Ca9d580d9D95922Fea6aF0', + '0xC32B93e581db6EBc50C08ce381143A259B92f1ED', + ], +} \ No newline at end of file From 89b4e79bb1793c05027f1c50dbdf706c3d966507 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Wed, 12 Jun 2024 17:10:52 -0400 Subject: [PATCH 12/23] fix ts error --- contracts/scripts/common.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/scripts/common.ts b/contracts/scripts/common.ts index 9e9fd9ae9..d81fdfbd4 100644 --- a/contracts/scripts/common.ts +++ b/contracts/scripts/common.ts @@ -32,7 +32,7 @@ export const getConfig = async ( configName: string, l1Rpc: providers.Provider ): Promise => { - const config = configs[configName] + const config = configs[configName as keyof typeof configs] if (!config) { throw new Error('config not found') } From 70caddaf13a344689ad1a9b989f17f3897d8a87a Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Wed, 12 Jun 2024 17:17:15 -0400 Subject: [PATCH 13/23] stricter types --- contracts/scripts/common.ts | 22 +++++++++++----------- contracts/scripts/files/configs/arb1.ts | 2 +- contracts/scripts/files/configs/local.ts | 15 ++++++++------- contracts/scripts/files/configs/nova.ts | 15 ++++++++------- contracts/scripts/files/configs/sepolia.ts | 15 ++++++++------- 5 files changed, 36 insertions(+), 33 deletions(-) diff --git a/contracts/scripts/common.ts b/contracts/scripts/common.ts index d81fdfbd4..088739665 100644 --- a/contracts/scripts/common.ts +++ b/contracts/scripts/common.ts @@ -1,4 +1,4 @@ -import { BigNumber, BigNumberish, providers } from 'ethers' +import { BigNumber, providers } from 'ethers' import { parseEther } from 'ethers/lib/utils' import fs from 'fs' @@ -63,8 +63,8 @@ export interface Config { confirmPeriodBlocks: number challengePeriodBlocks: number stakeToken: string - stakeAmt: BigNumberish - miniStakeAmounts: BigNumberish[] + stakeAmt: BigNumber + miniStakeAmounts: BigNumber[] chainId: number anyTrustFastConfirmer: string disableValidatorWhitelist: boolean @@ -135,25 +135,25 @@ export const validateConfig = async ( } // check all the settings exist - if (config.settings.confirmPeriodBlocks == 0) { + if (config.settings.confirmPeriodBlocks === 0) { throw new Error('confirmPeriodBlocks is 0') } - if (config.settings.stakeToken.length == 0) { + if (config.settings.stakeToken.length === 0) { throw new Error('stakeToken address is empty') } - if (config.settings.chainId == 0) { + if (config.settings.chainId === 0) { throw new Error('chainId is 0') } - if (config.settings.blockLeafSize == 0) { + if (config.settings.blockLeafSize === 0) { throw new Error('blockLeafSize is 0') } - if (config.settings.bigStepLeafSize == 0) { + if (config.settings.bigStepLeafSize === 0) { throw new Error('bigStepLeafSize is 0') } - if (config.settings.smallStepLeafSize == 0) { + if (config.settings.smallStepLeafSize === 0) { throw new Error('smallStepLeafSize is 0') } - if (config.settings.numBigStepLevel == 0) { + if (config.settings.numBigStepLevel === 0) { throw new Error('numBigStepLevel is 0') } @@ -168,7 +168,7 @@ export const validateConfig = async ( throw new Error('miniStakeAmts length is not numBigStepLevel + 2') } - if (config.validators.length == 0) { + if (config.validators.length === 0) { throw new Error('no validators') } } diff --git a/contracts/scripts/files/configs/arb1.ts b/contracts/scripts/files/configs/arb1.ts index af8a524f6..dfbddf69d 100644 --- a/contracts/scripts/files/configs/arb1.ts +++ b/contracts/scripts/files/configs/arb1.ts @@ -28,7 +28,7 @@ export const arb1: Config = { challengePeriodBlocks: 45818, // same as confirm period stakeToken: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH stakeAmt: parseEther('3600'), - miniStakeAmounts: ['0', parseEther('555'), parseEther('79')], + miniStakeAmounts: [parseEther('0'), parseEther('555'), parseEther('79')], chainId: 42161, anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', disableValidatorWhitelist: true, diff --git a/contracts/scripts/files/configs/local.ts b/contracts/scripts/files/configs/local.ts index d3284bbaf..3faabb3a6 100644 --- a/contracts/scripts/files/configs/local.ts +++ b/contracts/scripts/files/configs/local.ts @@ -1,3 +1,4 @@ +import { parseEther } from "ethers/lib/utils"; import { Config } from "../../common"; export const local: Config = { @@ -23,14 +24,14 @@ export const local: Config = { confirmPeriodBlocks: 100, challengePeriodBlocks: 110, stakeToken: '0x408Da76E87511429485C32E4Ad647DD14823Fdc4', - stakeAmt: '100000000000000000000', + stakeAmt: parseEther('1'), miniStakeAmounts: [ - '6000000000000000000', - '5000000000000000000', - '4000000000000000000', - '3000000000000000000', - '2000000000000000000', - '1000000000000000000', + parseEther('6'), + parseEther('5'), + parseEther('4'), + parseEther('3'), + parseEther('2'), + parseEther('1'), ], chainId: 412346, anyTrustFastConfirmer: '0x6d903f6003cca6255D85CcA4D3B5E5146dC33925', diff --git a/contracts/scripts/files/configs/nova.ts b/contracts/scripts/files/configs/nova.ts index 9a85072d4..7e79d93c8 100644 --- a/contracts/scripts/files/configs/nova.ts +++ b/contracts/scripts/files/configs/nova.ts @@ -1,3 +1,4 @@ +import { parseEther } from "ethers/lib/utils"; import { Config } from "../../common"; export const nova: Config = { @@ -23,14 +24,14 @@ export const nova: Config = { confirmPeriodBlocks: 50400, challengePeriodBlocks: 51600, stakeToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', - stakeAmt: '100000000000000000000', + stakeAmt: parseEther('1'), miniStakeAmounts: [ - '6000000000000000000', - '5000000000000000000', - '4000000000000000000', - '3000000000000000000', - '2000000000000000000', - '1000000000000000000', + parseEther('6'), + parseEther('5'), + parseEther('4'), + parseEther('3'), + parseEther('2'), + parseEther('1'), ], chainId: 42161, anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', diff --git a/contracts/scripts/files/configs/sepolia.ts b/contracts/scripts/files/configs/sepolia.ts index d056ca686..da8cb1d69 100644 --- a/contracts/scripts/files/configs/sepolia.ts +++ b/contracts/scripts/files/configs/sepolia.ts @@ -1,3 +1,4 @@ +import { parseEther } from "ethers/lib/utils"; import { Config } from "../../common"; export const sepolia: Config = { @@ -23,14 +24,14 @@ export const sepolia: Config = { confirmPeriodBlocks: 50400, challengePeriodBlocks: 51600, stakeToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', - stakeAmt: '100000000000000000000', + stakeAmt: parseEther('1'), miniStakeAmounts: [ - '6000000000000000000', - '5000000000000000000', - '4000000000000000000', - '3000000000000000000', - '2000000000000000000', - '1000000000000000000', + parseEther('6'), + parseEther('5'), + parseEther('4'), + parseEther('3'), + parseEther('2'), + parseEther('1'), ], chainId: 42161, anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', From 58c1ad5b1d0f08934d15da30b3595b76c079dc53 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Wed, 12 Jun 2024 17:18:04 -0400 Subject: [PATCH 14/23] fmt --- contracts/scripts/files/configs/arb1.ts | 6 +++--- contracts/scripts/files/configs/local.ts | 6 +++--- contracts/scripts/files/configs/nova.ts | 6 +++--- contracts/scripts/files/configs/sepolia.ts | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/contracts/scripts/files/configs/arb1.ts b/contracts/scripts/files/configs/arb1.ts index dfbddf69d..f58644c66 100644 --- a/contracts/scripts/files/configs/arb1.ts +++ b/contracts/scripts/files/configs/arb1.ts @@ -1,5 +1,5 @@ -import { parseEther } from "ethers/lib/utils"; -import { Config } from "../../common"; +import { parseEther } from 'ethers/lib/utils' +import { Config } from '../../common' export const arb1: Config = { contracts: { @@ -59,4 +59,4 @@ export const arb1: Config = { '0xf59caf75e8a4bfba4e6e07ad86c7e498e4d2519b', '0xf8d3e1cf58386c92b27710c6a0d8a54c76bc6ab5', ], -} \ No newline at end of file +} diff --git a/contracts/scripts/files/configs/local.ts b/contracts/scripts/files/configs/local.ts index 3faabb3a6..fba1380cd 100644 --- a/contracts/scripts/files/configs/local.ts +++ b/contracts/scripts/files/configs/local.ts @@ -1,5 +1,5 @@ -import { parseEther } from "ethers/lib/utils"; -import { Config } from "../../common"; +import { parseEther } from 'ethers/lib/utils' +import { Config } from '../../common' export const local: Config = { contracts: { @@ -49,4 +49,4 @@ export const local: Config = { }, }, validators: ['0xf10EF80c6eF4930A62C5F9661c91339Df4dBB173'], -} \ No newline at end of file +} diff --git a/contracts/scripts/files/configs/nova.ts b/contracts/scripts/files/configs/nova.ts index 7e79d93c8..88bf7fc88 100644 --- a/contracts/scripts/files/configs/nova.ts +++ b/contracts/scripts/files/configs/nova.ts @@ -1,5 +1,5 @@ -import { parseEther } from "ethers/lib/utils"; -import { Config } from "../../common"; +import { parseEther } from 'ethers/lib/utils' +import { Config } from '../../common' export const nova: Config = { contracts: { @@ -53,4 +53,4 @@ export const nova: Config = { '0x57004b440Cc4eb2FEd8c4d1865FaC907F9150C76', '0x24ca61c31c7f9af3ab104db6b9a444f28e9071e3', ], -} \ No newline at end of file +} diff --git a/contracts/scripts/files/configs/sepolia.ts b/contracts/scripts/files/configs/sepolia.ts index da8cb1d69..d2063cfb4 100644 --- a/contracts/scripts/files/configs/sepolia.ts +++ b/contracts/scripts/files/configs/sepolia.ts @@ -1,5 +1,5 @@ -import { parseEther } from "ethers/lib/utils"; -import { Config } from "../../common"; +import { parseEther } from 'ethers/lib/utils' +import { Config } from '../../common' export const sepolia: Config = { contracts: { @@ -53,4 +53,4 @@ export const sepolia: Config = { '0x87630025E63A30eCf9Ca9d580d9D95922Fea6aF0', '0xC32B93e581db6EBc50C08ce381143A259B92f1ED', ], -} \ No newline at end of file +} From cc23c578b7985b6a02793a84b5e772bf3fbad123 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Thu, 13 Jun 2024 11:43:23 -0400 Subject: [PATCH 15/23] update real parameters --- contracts/scripts/files/configs/arb1.ts | 15 ++++---- contracts/scripts/files/configs/index.ts | 8 +++++ contracts/scripts/files/configs/nova.ts | 35 +++++++++--------- contracts/scripts/files/configs/sepolia.ts | 41 +++++++++++----------- 4 files changed, 55 insertions(+), 44 deletions(-) diff --git a/contracts/scripts/files/configs/arb1.ts b/contracts/scripts/files/configs/arb1.ts index f58644c66..513c93d31 100644 --- a/contracts/scripts/files/configs/arb1.ts +++ b/contracts/scripts/files/configs/arb1.ts @@ -1,5 +1,6 @@ import { parseEther } from 'ethers/lib/utils' import { Config } from '../../common' +import { hoursToBlocks } from '.' export const arb1: Config = { contracts: { @@ -23,7 +24,7 @@ export const arb1: Config = { seqInbox: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', }, settings: { - challengeGracePeriodBlocks: 14400, // 2 days + challengeGracePeriodBlocks: hoursToBlocks(48), confirmPeriodBlocks: 45818, // same as old rollup, ~6.4 days challengePeriodBlocks: 45818, // same as confirm period stakeToken: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH @@ -32,19 +33,19 @@ export const arb1: Config = { chainId: 42161, anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', disableValidatorWhitelist: true, - blockLeafSize: 1048576, // todo below - bigStepLeafSize: 512, - smallStepLeafSize: 128, + blockLeafSize: 2**26, + bigStepLeafSize: 2**19, + smallStepLeafSize: 2**23, numBigStepLevel: 1, maxDataSize: 117964, isDelayBufferable: true, bufferConfig: { - max: 14400, - threshold: 300, + max: hoursToBlocks(48), + threshold: hoursToBlocks(1), replenishRateInBasis: 500, }, }, - validators: [ + validators: [ // TODO: double check validators or just remove them '0x0ff813f6bd577c3d1cdbe435bac0621be6ae34b4', '0x54c0d3d6c101580db3be8763a2ae2c6bb9dc840c', '0x56d83349c2b8dcf74d7e92d5b6b33d0badd52d78', diff --git a/contracts/scripts/files/configs/index.ts b/contracts/scripts/files/configs/index.ts index ecd864a6c..9d7da9dac 100644 --- a/contracts/scripts/files/configs/index.ts +++ b/contracts/scripts/files/configs/index.ts @@ -3,6 +3,14 @@ import { nova } from './nova' import { sepolia } from './sepolia' import { local } from './local' +export function hoursToBlocks(hours: number, blockTime = 12) { + const x = hours * 3600 / blockTime + if (x !== Math.floor(x)) { + throw new Error('hours must be divisible by blockTime') + } + return x +} + export const configs = { arb1, nova, diff --git a/contracts/scripts/files/configs/nova.ts b/contracts/scripts/files/configs/nova.ts index 88bf7fc88..308753a28 100644 --- a/contracts/scripts/files/configs/nova.ts +++ b/contracts/scripts/files/configs/nova.ts @@ -1,8 +1,12 @@ import { parseEther } from 'ethers/lib/utils' import { Config } from '../../common' +import { hoursToBlocks } from '.' export const nova: Config = { contracts: { + // the l1Timelock does not actually need to be the timelock + // it is only used to set the excess stake receiver / loser stake escrow + // TODO: change this to a fee router before real deployment l1Timelock: '0xE6841D92B0C345144506576eC13ECf5103aC7f49', rollup: '0xFb209827c58283535b744575e11953DCC4bEAD88', bridge: '0xC1Ebd02f738644983b6C4B2d440b8e77DdE276Bd', @@ -20,35 +24,32 @@ export const nova: Config = { seqInbox: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', }, settings: { - challengeGracePeriodBlocks: 14400, - confirmPeriodBlocks: 50400, - challengePeriodBlocks: 51600, + challengeGracePeriodBlocks: hoursToBlocks(48), + confirmPeriodBlocks: 45818, // same as old rollup, ~6.4 days + challengePeriodBlocks: 45818, // same as confirm period stakeToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', - stakeAmt: parseEther('1'), + stakeAmt: parseEther('1'), // warrants discussion miniStakeAmounts: [ - parseEther('6'), - parseEther('5'), - parseEther('4'), - parseEther('3'), - parseEther('2'), + parseEther('0'), + parseEther('1'), parseEther('1'), ], chainId: 42161, - anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', + anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', // TODO disableValidatorWhitelist: false, - blockLeafSize: 1048576, - bigStepLeafSize: 512, - smallStepLeafSize: 128, - numBigStepLevel: 4, + blockLeafSize: 2**26, // leaf sizes same as arb1 + bigStepLeafSize: 2**19, + smallStepLeafSize: 2**23, + numBigStepLevel: 1, maxDataSize: 117964, isDelayBufferable: true, bufferConfig: { - max: 14400, - threshold: 300, + max: hoursToBlocks(48), + threshold: hoursToBlocks(1), replenishRateInBasis: 500, }, }, - validators: [ + validators: [ // TODO: double check validators '0xE27d4Ed355e5273A3D4855c8e11BC4a8d3e39b87', '0x57004b440Cc4eb2FEd8c4d1865FaC907F9150C76', '0x24ca61c31c7f9af3ab104db6b9a444f28e9071e3', diff --git a/contracts/scripts/files/configs/sepolia.ts b/contracts/scripts/files/configs/sepolia.ts index d2063cfb4..7cc3bc608 100644 --- a/contracts/scripts/files/configs/sepolia.ts +++ b/contracts/scripts/files/configs/sepolia.ts @@ -1,8 +1,12 @@ import { parseEther } from 'ethers/lib/utils' import { Config } from '../../common' +import { hoursToBlocks } from '.' export const sepolia: Config = { contracts: { + // the l1Timelock does not actually need to be the timelock + // it is only used to set the excess stake receiver / loser stake escrow + // TODO: change this to a fee router before real deployment l1Timelock: '0x6EC62D826aDc24AeA360be9cF2647c42b9Cdb19b', rollup: '0xd80810638dbDF9081b72C1B33c65375e807281C8', bridge: '0x38f918D0E9F1b721EDaA41302E399fa1B79333a9', @@ -20,35 +24,32 @@ export const sepolia: Config = { seqInbox: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', }, settings: { - challengeGracePeriodBlocks: 14400, - confirmPeriodBlocks: 50400, - challengePeriodBlocks: 51600, - stakeToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', - stakeAmt: parseEther('1'), + challengeGracePeriodBlocks: hoursToBlocks(12), + confirmPeriodBlocks: 45818, // current is 20 blocks, 45818 is arb1 config + challengePeriodBlocks: 45818, // same as confirm period + stakeToken: '0xefb383126640fe4a760010c6e59c397d2b6c7141', // WETH + stakeAmt: parseEther('36'), // 1/100th of arb1, same for mini stakes miniStakeAmounts: [ - parseEther('6'), - parseEther('5'), - parseEther('4'), - parseEther('3'), - parseEther('2'), - parseEther('1'), + parseEther('0'), + parseEther('5.5'), + parseEther('0.79'), ], - chainId: 42161, + chainId: 421614, anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', - disableValidatorWhitelist: false, - blockLeafSize: 1048576, - bigStepLeafSize: 512, - smallStepLeafSize: 128, - numBigStepLevel: 4, + disableValidatorWhitelist: true, // warrants discussion + blockLeafSize: 2**26, // leaf sizes same as arb1 + bigStepLeafSize: 2**19, + smallStepLeafSize: 2**23, + numBigStepLevel: 1, maxDataSize: 117964, isDelayBufferable: true, bufferConfig: { - max: 14400, - threshold: 300, + max: hoursToBlocks(48), + threshold: hoursToBlocks(1), replenishRateInBasis: 500, }, }, - validators: [ + validators: [ // TODO: double check validators or just remove them '0x8a8f0a24d7e58a76FC8F77bb68C7c902b91e182e', '0x87630025E63A30eCf9Ca9d580d9D95922Fea6aF0', '0xC32B93e581db6EBc50C08ce381143A259B92f1ED', From 316c1bd30c017e7eeeb51c8e1195fb7ae8ca6cf0 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Thu, 13 Jun 2024 13:03:38 -0400 Subject: [PATCH 16/23] Move configs to ts files (#669) --- contracts/.env-sample | 5 +- contracts/scripts/common.ts | 45 ++++++------- contracts/scripts/files/configs/arb1.ts | 62 ++++++++++++++++++ contracts/scripts/files/configs/index.ts | 11 ++++ contracts/scripts/files/configs/local.ts | 52 +++++++++++++++ contracts/scripts/files/configs/nova.ts | 56 +++++++++++++++++ contracts/scripts/files/configs/sepolia.ts | 56 +++++++++++++++++ contracts/scripts/files/localConfig.json | 51 --------------- .../scripts/files/localDeployedContracts.json | 2 - contracts/scripts/files/localNetwork.json | 53 ---------------- contracts/scripts/files/mainnetConfig.json | 63 ------------------- .../files/mainnetDeployedContracts.json | 1 - contracts/scripts/files/novaConfig.json | 53 ---------------- .../scripts/files/novaDeployedContracts.json | 1 - contracts/scripts/files/sepoliaConfig.json | 53 ---------------- .../files/sepoliaDeployedContracts.json | 1 - contracts/scripts/populateLookup.ts | 21 ++++--- contracts/scripts/prepareBoldUpgrade.ts | 19 +++--- .../scripts/testLocalExecuteBoldUpgrade.ts | 31 ++++++--- 19 files changed, 306 insertions(+), 330 deletions(-) create mode 100644 contracts/scripts/files/configs/arb1.ts create mode 100644 contracts/scripts/files/configs/index.ts create mode 100644 contracts/scripts/files/configs/local.ts create mode 100644 contracts/scripts/files/configs/nova.ts create mode 100644 contracts/scripts/files/configs/sepolia.ts delete mode 100644 contracts/scripts/files/localConfig.json delete mode 100644 contracts/scripts/files/localDeployedContracts.json delete mode 100644 contracts/scripts/files/localNetwork.json delete mode 100644 contracts/scripts/files/mainnetConfig.json delete mode 100644 contracts/scripts/files/mainnetDeployedContracts.json delete mode 100644 contracts/scripts/files/novaConfig.json delete mode 100644 contracts/scripts/files/novaDeployedContracts.json delete mode 100644 contracts/scripts/files/sepoliaConfig.json delete mode 100644 contracts/scripts/files/sepoliaDeployedContracts.json diff --git a/contracts/.env-sample b/contracts/.env-sample index e87d92745..3a1bea4ad 100644 --- a/contracts/.env-sample +++ b/contracts/.env-sample @@ -1,5 +1,4 @@ L1_RPC_URL="http://localhost:8545" L1_PRIV_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" -EXECUTOR="0xE6841D92B0C345144506576eC13ECf5103aC7f49" # for the upgrade test, address that can call the upgrade executor -CONFIG_LOCATION="./scripts/files/mainnetConfig.json" -DEPLOYED_CONTRACTS_LOCATION="./scripts/files/mainnetDeployedContracts.json" +CONFIG_NETWORK_NAME="arb1" +DEPLOYED_CONTRACTS_DIR="./scripts/files/" diff --git a/contracts/scripts/common.ts b/contracts/scripts/common.ts index e10373c89..088739665 100644 --- a/contracts/scripts/common.ts +++ b/contracts/scripts/common.ts @@ -1,6 +1,9 @@ import { BigNumber, providers } from 'ethers' import { parseEther } from 'ethers/lib/utils' import fs from 'fs' + +import { configs } from './files/configs' + export interface DeployedContracts { bridge: string seqInbox: string @@ -26,11 +29,15 @@ export const getJsonFile = (fileLocation: string) => { } export const getConfig = async ( - configLocation: string, + configName: string, l1Rpc: providers.Provider ): Promise => { - const config = getJsonFile(configLocation) as RawConfig - return await validateConfig(config, l1Rpc) + const config = configs[configName as keyof typeof configs] + if (!config) { + throw new Error('config not found') + } + await validateConfig(config, l1Rpc) + return config } export interface Config { @@ -84,9 +91,9 @@ export type RawConfig = Omit & { } export const validateConfig = async ( - config: RawConfig, + config: Config, l1Rpc: providers.Provider -): Promise => { +) => { // check all the config.contracts exist if ((await l1Rpc.getCode(config.contracts.l1Timelock)).length <= 2) { throw new Error('l1Timelock address is not a contract') @@ -128,25 +135,25 @@ export const validateConfig = async ( } // check all the settings exist - if (config.settings.confirmPeriodBlocks == 0) { + if (config.settings.confirmPeriodBlocks === 0) { throw new Error('confirmPeriodBlocks is 0') } - if (config.settings.stakeToken.length == 0) { + if (config.settings.stakeToken.length === 0) { throw new Error('stakeToken address is empty') } - if (config.settings.chainId == 0) { + if (config.settings.chainId === 0) { throw new Error('chainId is 0') } - if (config.settings.blockLeafSize == 0) { + if (config.settings.blockLeafSize === 0) { throw new Error('blockLeafSize is 0') } - if (config.settings.bigStepLeafSize == 0) { + if (config.settings.bigStepLeafSize === 0) { throw new Error('bigStepLeafSize is 0') } - if (config.settings.smallStepLeafSize == 0) { + if (config.settings.smallStepLeafSize === 0) { throw new Error('smallStepLeafSize is 0') } - if (config.settings.numBigStepLevel == 0) { + if (config.settings.numBigStepLevel === 0) { throw new Error('numBigStepLevel is 0') } @@ -160,20 +167,8 @@ export const validateConfig = async ( if (miniStakeAmounts.length !== config.settings.numBigStepLevel + 2) { throw new Error('miniStakeAmts length is not numBigStepLevel + 2') } - if (miniStakeAmounts.some((amt) => amt.lt(parseEther('0.1')))) { - throw new Error('miniStakeAmt is less than 0.1 eth') - } - if (config.validators.length == 0) { + if (config.validators.length === 0) { throw new Error('no validators') } - - return { - ...config, - settings: { - ...config.settings, - stakeAmt: stakeAmount, - miniStakeAmounts, - }, - } } diff --git a/contracts/scripts/files/configs/arb1.ts b/contracts/scripts/files/configs/arb1.ts new file mode 100644 index 000000000..f58644c66 --- /dev/null +++ b/contracts/scripts/files/configs/arb1.ts @@ -0,0 +1,62 @@ +import { parseEther } from 'ethers/lib/utils' +import { Config } from '../../common' + +export const arb1: Config = { + contracts: { + // the l1Timelock does not actually need to be the timelock + // it is only used to set the excess stake receiver / loser stake escrow + // TODO: change this to a fee router before real deployment + l1Timelock: '0xE6841D92B0C345144506576eC13ECf5103aC7f49', + rollup: '0x5eF0D09d1E6204141B4d37530808eD19f60FBa35', + bridge: '0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a', + sequencerInbox: '0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6', + rollupEventInbox: '0x57Bd336d579A51938619271a7Cc137a46D0501B1', + outbox: '0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840', + inbox: '0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f', + upgradeExecutor: '0x3ffFbAdAF827559da092217e474760E2b2c3CeDd', + }, + proxyAdmins: { + outbox: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', + inbox: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', + bridge: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', + rei: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', + seqInbox: '0x554723262467f125ac9e1cdfa9ce15cc53822dbd', + }, + settings: { + challengeGracePeriodBlocks: 14400, // 2 days + confirmPeriodBlocks: 45818, // same as old rollup, ~6.4 days + challengePeriodBlocks: 45818, // same as confirm period + stakeToken: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH + stakeAmt: parseEther('3600'), + miniStakeAmounts: [parseEther('0'), parseEther('555'), parseEther('79')], + chainId: 42161, + anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', + disableValidatorWhitelist: true, + blockLeafSize: 1048576, // todo below + bigStepLeafSize: 512, + smallStepLeafSize: 128, + numBigStepLevel: 1, + maxDataSize: 117964, + isDelayBufferable: true, + bufferConfig: { + max: 14400, + threshold: 300, + replenishRateInBasis: 500, + }, + }, + validators: [ + '0x0ff813f6bd577c3d1cdbe435bac0621be6ae34b4', + '0x54c0d3d6c101580db3be8763a2ae2c6bb9dc840c', + '0x56d83349c2b8dcf74d7e92d5b6b33d0badd52d78', + '0x610aa279989f440820e14248bd3879b148717974', + '0x6fb914de4653ec5592b7c15f4d9466cbd03f2104', + '0x758c6bb08b3ea5889b5cddbdef9a45b3a983c398', + '0x7cf3d537733f6ba4183a833c9b021265716ce9d0', + '0x83215480db2c6a7e56f9e99ef93ab9b36f8a3dd5', + '0xab1a39332e934300ebcc57b5f95ca90631a347ff', + '0xb0cb1384e3f4a9a9b2447e39b05e10631e1d34b0', + '0xddf2f71ab206c0138a8eceeb54386567d5abf01e', + '0xf59caf75e8a4bfba4e6e07ad86c7e498e4d2519b', + '0xf8d3e1cf58386c92b27710c6a0d8a54c76bc6ab5', + ], +} diff --git a/contracts/scripts/files/configs/index.ts b/contracts/scripts/files/configs/index.ts new file mode 100644 index 000000000..ecd864a6c --- /dev/null +++ b/contracts/scripts/files/configs/index.ts @@ -0,0 +1,11 @@ +import { arb1 } from './arb1' +import { nova } from './nova' +import { sepolia } from './sepolia' +import { local } from './local' + +export const configs = { + arb1, + nova, + sepolia, + local, +} diff --git a/contracts/scripts/files/configs/local.ts b/contracts/scripts/files/configs/local.ts new file mode 100644 index 000000000..fba1380cd --- /dev/null +++ b/contracts/scripts/files/configs/local.ts @@ -0,0 +1,52 @@ +import { parseEther } from 'ethers/lib/utils' +import { Config } from '../../common' + +export const local: Config = { + contracts: { + bridge: '0x5eCF728ffC5C5E802091875f96281B5aeECf6C49', + inbox: '0x9f8c1c641336A371031499e3c362e40d58d0f254', + outbox: '0x50143333b44Ea46255BEb67255C9Afd35551072F', + rollup: '0xC3124dD1FA0e5D6135c25279760DBF9d9286467B', + sequencerInbox: '0x18d19C5d3E685f5be5b9C86E097f0E439285D216', + rollupEventInbox: '0x0e73faf857e1ca53e700856fcf19f31f920a1e3c', + upgradeExecutor: '0x513d9f96d4d0563debae8a0dc307ea0e46b10ed7', + l1Timelock: '0xC3124dD1FA0e5D6135c25279760DBF9d9286467B', + }, + proxyAdmins: { + outbox: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', + inbox: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', + bridge: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', + rei: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', + seqInbox: '0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3', + }, + settings: { + challengeGracePeriodBlocks: 10, + confirmPeriodBlocks: 100, + challengePeriodBlocks: 110, + stakeToken: '0x408Da76E87511429485C32E4Ad647DD14823Fdc4', + stakeAmt: parseEther('1'), + miniStakeAmounts: [ + parseEther('6'), + parseEther('5'), + parseEther('4'), + parseEther('3'), + parseEther('2'), + parseEther('1'), + ], + chainId: 412346, + anyTrustFastConfirmer: '0x6d903f6003cca6255D85CcA4D3B5E5146dC33925', + disableValidatorWhitelist: true, + blockLeafSize: 1048576, + bigStepLeafSize: 512, + smallStepLeafSize: 128, + numBigStepLevel: 4, + maxDataSize: 117964, + isDelayBufferable: true, + bufferConfig: { + max: 14400, + threshold: 300, + replenishRateInBasis: 500, + }, + }, + validators: ['0xf10EF80c6eF4930A62C5F9661c91339Df4dBB173'], +} diff --git a/contracts/scripts/files/configs/nova.ts b/contracts/scripts/files/configs/nova.ts new file mode 100644 index 000000000..88bf7fc88 --- /dev/null +++ b/contracts/scripts/files/configs/nova.ts @@ -0,0 +1,56 @@ +import { parseEther } from 'ethers/lib/utils' +import { Config } from '../../common' + +export const nova: Config = { + contracts: { + l1Timelock: '0xE6841D92B0C345144506576eC13ECf5103aC7f49', + rollup: '0xFb209827c58283535b744575e11953DCC4bEAD88', + bridge: '0xC1Ebd02f738644983b6C4B2d440b8e77DdE276Bd', + sequencerInbox: '0x211E1c4c7f1bF5351Ac850Ed10FD68CFfCF6c21b', + rollupEventInbox: '0x304807A7ed6c1296df2128E6ff3836e477329CD2', + outbox: '0xD4B80C3D7240325D18E645B49e6535A3Bf95cc58', + inbox: '0xc4448b71118c9071Bcb9734A0EAc55D18A153949', + upgradeExecutor: '0x3ffFbAdAF827559da092217e474760E2b2c3CeDd', + }, + proxyAdmins: { + outbox: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', + inbox: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', + bridge: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', + rei: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', + seqInbox: '0x71d78dc7ccc0e037e12de1e50f5470903ce37148', + }, + settings: { + challengeGracePeriodBlocks: 14400, + confirmPeriodBlocks: 50400, + challengePeriodBlocks: 51600, + stakeToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + stakeAmt: parseEther('1'), + miniStakeAmounts: [ + parseEther('6'), + parseEther('5'), + parseEther('4'), + parseEther('3'), + parseEther('2'), + parseEther('1'), + ], + chainId: 42161, + anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', + disableValidatorWhitelist: false, + blockLeafSize: 1048576, + bigStepLeafSize: 512, + smallStepLeafSize: 128, + numBigStepLevel: 4, + maxDataSize: 117964, + isDelayBufferable: true, + bufferConfig: { + max: 14400, + threshold: 300, + replenishRateInBasis: 500, + }, + }, + validators: [ + '0xE27d4Ed355e5273A3D4855c8e11BC4a8d3e39b87', + '0x57004b440Cc4eb2FEd8c4d1865FaC907F9150C76', + '0x24ca61c31c7f9af3ab104db6b9a444f28e9071e3', + ], +} diff --git a/contracts/scripts/files/configs/sepolia.ts b/contracts/scripts/files/configs/sepolia.ts new file mode 100644 index 000000000..d2063cfb4 --- /dev/null +++ b/contracts/scripts/files/configs/sepolia.ts @@ -0,0 +1,56 @@ +import { parseEther } from 'ethers/lib/utils' +import { Config } from '../../common' + +export const sepolia: Config = { + contracts: { + l1Timelock: '0x6EC62D826aDc24AeA360be9cF2647c42b9Cdb19b', + rollup: '0xd80810638dbDF9081b72C1B33c65375e807281C8', + bridge: '0x38f918D0E9F1b721EDaA41302E399fa1B79333a9', + sequencerInbox: '0x6c97864CE4bEf387dE0b3310A44230f7E3F1be0D', + rollupEventInbox: '0xD5B196dd7EC4D823ff5F695536c61f7c8E642B94', + outbox: '0x65f07C7D521164a4d5DaC6eB8Fac8DA067A3B78F', + inbox: '0xaAe29B0366299461418F5324a79Afc425BE5ae21', + upgradeExecutor: '0x5FEe78FE9AD96c1d8557C6D6BB22Eb5A61eeD315', + }, + proxyAdmins: { + outbox: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', + inbox: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', + bridge: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', + rei: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', + seqInbox: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', + }, + settings: { + challengeGracePeriodBlocks: 14400, + confirmPeriodBlocks: 50400, + challengePeriodBlocks: 51600, + stakeToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + stakeAmt: parseEther('1'), + miniStakeAmounts: [ + parseEther('6'), + parseEther('5'), + parseEther('4'), + parseEther('3'), + parseEther('2'), + parseEther('1'), + ], + chainId: 42161, + anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', + disableValidatorWhitelist: false, + blockLeafSize: 1048576, + bigStepLeafSize: 512, + smallStepLeafSize: 128, + numBigStepLevel: 4, + maxDataSize: 117964, + isDelayBufferable: true, + bufferConfig: { + max: 14400, + threshold: 300, + replenishRateInBasis: 500, + }, + }, + validators: [ + '0x8a8f0a24d7e58a76FC8F77bb68C7c902b91e182e', + '0x87630025E63A30eCf9Ca9d580d9D95922Fea6aF0', + '0xC32B93e581db6EBc50C08ce381143A259B92f1ED', + ], +} diff --git a/contracts/scripts/files/localConfig.json b/contracts/scripts/files/localConfig.json deleted file mode 100644 index e434c3fed..000000000 --- a/contracts/scripts/files/localConfig.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "contracts": { - "bridge": "0x5eCF728ffC5C5E802091875f96281B5aeECf6C49", - "inbox": "0x9f8c1c641336A371031499e3c362e40d58d0f254", - "outbox": "0x50143333b44Ea46255BEb67255C9Afd35551072F", - "rollup": "0xC3124dD1FA0e5D6135c25279760DBF9d9286467B", - "sequencerInbox": "0x18d19C5d3E685f5be5b9C86E097f0E439285D216", - "rollupEventInbox": "0x0e73faf857e1ca53e700856fcf19f31f920a1e3c", - "upgradeExecutor": "0x513d9f96d4d0563debae8a0dc307ea0e46b10ed7", - "l1Timelock": "0xC3124dD1FA0e5D6135c25279760DBF9d9286467B" - }, - "proxyAdmins": { - "outbox": "0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3", - "inbox": "0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3", - "bridge": "0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3", - "rei": "0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3", - "seqInbox": "0x2a1f38c9097e7883570e0b02bfbe6869cc25d8a3" - }, - "settings": { - "challengeGracePeriodBlocks": 10, - "confirmPeriodBlocks": 100, - "challengePeriodBlocks": 110, - "stakeToken": "0x408Da76E87511429485C32E4Ad647DD14823Fdc4", - "stakeAmt": "100000000000000000000", - "miniStakeAmounts": [ - "6000000000000000000", - "5000000000000000000", - "4000000000000000000", - "3000000000000000000", - "2000000000000000000", - "1000000000000000000" - ], - "chainId": 412346, - "anyTrustFastConfirmer": "0x6d903f6003cca6255D85CcA4D3B5E5146dC33925", - "disableValidatorWhitelist": true, - "blockLeafSize": 1048576, - "bigStepLeafSize": 512, - "smallStepLeafSize": 128, - "numBigStepLevel": 4, - "maxDataSize": 117964, - "isDelayBufferable": true, - "bufferConfig": { - "max": 14400, - "threshold": 300, - "replenishRateInBasis": 500 - } - }, - "validators": [ - "0xf10EF80c6eF4930A62C5F9661c91339Df4dBB173" - ] -} \ No newline at end of file diff --git a/contracts/scripts/files/localDeployedContracts.json b/contracts/scripts/files/localDeployedContracts.json deleted file mode 100644 index 7a73a41bf..000000000 --- a/contracts/scripts/files/localDeployedContracts.json +++ /dev/null @@ -1,2 +0,0 @@ -{ -} \ No newline at end of file diff --git a/contracts/scripts/files/localNetwork.json b/contracts/scripts/files/localNetwork.json deleted file mode 100644 index 4b1c7d4b0..000000000 --- a/contracts/scripts/files/localNetwork.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "l1Network": { - "blockTime": 10, - "chainID": 1337, - "explorerUrl": "", - "isCustom": true, - "name": "EthLocal", - "partnerChainIDs": [ - 412346 - ], - "isArbitrum": false - }, - "l2Network": { - "chainID": 412346, - "confirmPeriodBlocks": 20, - "ethBridge": { - "bridge": "0x9B4477cAD544fB092B1Bc551d88465f7F13a443F", - "inbox": "0xa5d8d368c4Fc06D71724d91561d6F2a880FD4fD9", - "outbox": "0xbBaAB28Ad701e822148411376975cca7E02323d7", - "rollup": "0x9c14dfd8e5c262f9652e78f2b0a13389ee41d717", - "sequencerInbox": "0xD2B20a3B8C1d97A64eFA1120D3339d87841ccAE1" - }, - "explorerUrl": "", - "isArbitrum": true, - "isCustom": true, - "name": "ArbLocal", - "partnerChainID": 1337, - "retryableLifetimeSeconds": 604800, - "nitroGenesisBlock": 0, - "nitroGenesisL1Block": 0, - "depositTimeout": 900000, - "tokenBridge": { - "l1CustomGateway": "0x1c924636933ceDE03245f19756662e92F851293D", - "l1ERC20Gateway": "0xeBef8abC1DF5853345f319D5ACcba1d01AECCBD8", - "l1GatewayRouter": "0x932Af0F51E02a8b371d00E7448Eb6e91c013274d", - "l1MultiCall": "0x4De74F7B2a30a1Ee39b374f6F11859c334234A79", - "l1ProxyAdmin": "0xFFB9cE193d5FE12360f47a93A97d72da65c35019", - "l1Weth": "0x525c2aBA45F66987217323E8a05EA400C65D06DC", - "l1WethGateway": "0x1990703B7C717008F34d5088C2838c07B6C6e97b", - "l2CustomGateway": "0xD53b0E696c16520308186bB7c64E3dE85be45Ab9", - "l2ERC20Gateway": "0x7e6C3A78da71Ed7d6f9D3f155C5756fB1129E19c", - "l2GatewayRouter": "0x614234364127E3D5De331A9f2cBeFaE6869168eB", - "l2Multicall": "0x9815277063378fa7dE6E9a8159181b2fd44d7956", - "l2ProxyAdmin": "0x1bd440c4b2361ac11c20b5CB2409e64cB82DDb30", - "l2Weth": "0x9ffAd12EE17abF43a060760f3d93932a3DE5EB72", - "l2WethGateway": "0xf2Ec70e05fab34580B26890544dF2fF04dc63521" - }, - "partnerChainIDs": [], - "blockTime": 0.25 - }, - "l1TokenBridgeCreator": "0x3DF948c956e14175f43670407d5796b95Bb219D8", - "retryableSender": "0xF5FfD11A55AFD39377411Ab9856474D2a7Cb697e" -} \ No newline at end of file diff --git a/contracts/scripts/files/mainnetConfig.json b/contracts/scripts/files/mainnetConfig.json deleted file mode 100644 index adf845499..000000000 --- a/contracts/scripts/files/mainnetConfig.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "contracts": { - "l1Timelock": "0xE6841D92B0C345144506576eC13ECf5103aC7f49", - "rollup": "0x5eF0D09d1E6204141B4d37530808eD19f60FBa35", - "bridge": "0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a", - "sequencerInbox": "0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6", - "rollupEventInbox": "0x57Bd336d579A51938619271a7Cc137a46D0501B1", - "outbox": "0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840", - "inbox": "0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f", - "upgradeExecutor": "0x3ffFbAdAF827559da092217e474760E2b2c3CeDd" - }, - "proxyAdmins": { - "outbox": "0x554723262467f125ac9e1cdfa9ce15cc53822dbd", - "inbox": "0x554723262467f125ac9e1cdfa9ce15cc53822dbd", - "bridge": "0x554723262467f125ac9e1cdfa9ce15cc53822dbd", - "rei": "0x554723262467f125ac9e1cdfa9ce15cc53822dbd", - "seqInbox": "0x554723262467f125ac9e1cdfa9ce15cc53822dbd" - }, - "settings": { - "challengeGracePeriodBlocks": 14400, - "confirmPeriodBlocks": 50400, - "challengePeriodBlocks": 51600, - "stakeToken": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "stakeAmt": "100000000000000000000", - "miniStakeAmounts": [ - "6000000000000000000", - "5000000000000000000", - "4000000000000000000", - "3000000000000000000", - "2000000000000000000", - "1000000000000000000" - ], - "chainId": 42161, - "anyTrustFastConfirmer": "0x0000000000000000000000000000000000000000", - "disableValidatorWhitelist": false, - "blockLeafSize": 1048576, - "bigStepLeafSize": 512, - "smallStepLeafSize": 128, - "numBigStepLevel": 4, - "maxDataSize": 117964, - "isDelayBufferable": true, - "bufferConfig": { - "max": 14400, - "threshold": 300, - "replenishRateInBasis": 500 - } - }, - "validators": [ - "0x0ff813f6bd577c3d1cdbe435bac0621be6ae34b4", - "0x54c0d3d6c101580db3be8763a2ae2c6bb9dc840c", - "0x56d83349c2b8dcf74d7e92d5b6b33d0badd52d78", - "0x610aa279989f440820e14248bd3879b148717974", - "0x6fb914de4653ec5592b7c15f4d9466cbd03f2104", - "0x758c6bb08b3ea5889b5cddbdef9a45b3a983c398", - "0x7cf3d537733f6ba4183a833c9b021265716ce9d0", - "0x83215480db2c6a7e56f9e99ef93ab9b36f8a3dd5", - "0xab1a39332e934300ebcc57b5f95ca90631a347ff", - "0xb0cb1384e3f4a9a9b2447e39b05e10631e1d34b0", - "0xddf2f71ab206c0138a8eceeb54386567d5abf01e", - "0xf59caf75e8a4bfba4e6e07ad86c7e498e4d2519b", - "0xf8d3e1cf58386c92b27710c6a0d8a54c76bc6ab5" - ] -} diff --git a/contracts/scripts/files/mainnetDeployedContracts.json b/contracts/scripts/files/mainnetDeployedContracts.json deleted file mode 100644 index 9e26dfeeb..000000000 --- a/contracts/scripts/files/mainnetDeployedContracts.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/contracts/scripts/files/novaConfig.json b/contracts/scripts/files/novaConfig.json deleted file mode 100644 index 5da09910a..000000000 --- a/contracts/scripts/files/novaConfig.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "contracts": { - "l1Timelock": "0xE6841D92B0C345144506576eC13ECf5103aC7f49", - "rollup": "0xFb209827c58283535b744575e11953DCC4bEAD88", - "bridge": "0xC1Ebd02f738644983b6C4B2d440b8e77DdE276Bd", - "sequencerInbox": "0x211E1c4c7f1bF5351Ac850Ed10FD68CFfCF6c21b", - "rollupEventInbox": "0x304807A7ed6c1296df2128E6ff3836e477329CD2", - "outbox": "0xD4B80C3D7240325D18E645B49e6535A3Bf95cc58", - "inbox": "0xc4448b71118c9071Bcb9734A0EAc55D18A153949", - "upgradeExecutor": "0x3ffFbAdAF827559da092217e474760E2b2c3CeDd" - }, - "proxyAdmins": { - "outbox": "0x71d78dc7ccc0e037e12de1e50f5470903ce37148", - "inbox": "0x71d78dc7ccc0e037e12de1e50f5470903ce37148", - "bridge": "0x71d78dc7ccc0e037e12de1e50f5470903ce37148", - "rei": "0x71d78dc7ccc0e037e12de1e50f5470903ce37148", - "seqInbox": "0x71d78dc7ccc0e037e12de1e50f5470903ce37148" - }, - "settings": { - "challengeGracePeriodBlocks": 14400, - "confirmPeriodBlocks": 50400, - "challengePeriodBlocks": 51600, - "stakeToken": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "stakeAmt": "100000000000000000000", - "miniStakeAmounts": [ - "6000000000000000000", - "5000000000000000000", - "4000000000000000000", - "3000000000000000000", - "2000000000000000000", - "1000000000000000000" - ], - "chainId": 42161, - "anyTrustFastConfirmer": "0x0000000000000000000000000000000000000000", - "disableValidatorWhitelist": false, - "blockLeafSize": 1048576, - "bigStepLeafSize": 512, - "smallStepLeafSize": 128, - "numBigStepLevel": 4, - "maxDataSize": 117964, - "isDelayBufferable": true, - "bufferConfig": { - "max": 14400, - "threshold": 300, - "replenishRateInBasis": 500 - } - }, - "validators": [ - "0xE27d4Ed355e5273A3D4855c8e11BC4a8d3e39b87", - "0x57004b440Cc4eb2FEd8c4d1865FaC907F9150C76", - "0x24ca61c31c7f9af3ab104db6b9a444f28e9071e3" - ] -} diff --git a/contracts/scripts/files/novaDeployedContracts.json b/contracts/scripts/files/novaDeployedContracts.json deleted file mode 100644 index 9e26dfeeb..000000000 --- a/contracts/scripts/files/novaDeployedContracts.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/contracts/scripts/files/sepoliaConfig.json b/contracts/scripts/files/sepoliaConfig.json deleted file mode 100644 index 22b97aeb4..000000000 --- a/contracts/scripts/files/sepoliaConfig.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "contracts": { - "l1Timelock": "0x6EC62D826aDc24AeA360be9cF2647c42b9Cdb19b", - "rollup": "0xd80810638dbDF9081b72C1B33c65375e807281C8", - "bridge": "0x38f918D0E9F1b721EDaA41302E399fa1B79333a9", - "sequencerInbox": "0x6c97864CE4bEf387dE0b3310A44230f7E3F1be0D", - "rollupEventInbox": "0xD5B196dd7EC4D823ff5F695536c61f7c8E642B94", - "outbox": "0x65f07C7D521164a4d5DaC6eB8Fac8DA067A3B78F", - "inbox": "0xaAe29B0366299461418F5324a79Afc425BE5ae21", - "upgradeExecutor": "0x5FEe78FE9AD96c1d8557C6D6BB22Eb5A61eeD315" - }, - "proxyAdmins": { - "outbox": "0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8", - "inbox": "0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8", - "bridge": "0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8", - "rei": "0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8", - "seqInbox": "0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8" - }, - "settings": { - "challengeGracePeriodBlocks": 14400, - "confirmPeriodBlocks": 50400, - "challengePeriodBlocks": 51600, - "stakeToken": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "stakeAmt": "100000000000000000000", - "miniStakeAmounts": [ - "6000000000000000000", - "5000000000000000000", - "4000000000000000000", - "3000000000000000000", - "2000000000000000000", - "1000000000000000000" - ], - "chainId": 42161, - "anyTrustFastConfirmer": "0x0000000000000000000000000000000000000000", - "disableValidatorWhitelist": false, - "blockLeafSize": 1048576, - "bigStepLeafSize": 512, - "smallStepLeafSize": 128, - "numBigStepLevel": 4, - "maxDataSize": 117964, - "isDelayBufferable": true, - "bufferConfig": { - "max": 14400, - "threshold": 300, - "replenishRateInBasis": 500 - } - }, - "validators": [ - "0x8a8f0a24d7e58a76FC8F77bb68C7c902b91e182e", - "0x87630025E63A30eCf9Ca9d580d9D95922Fea6aF0", - "0xC32B93e581db6EBc50C08ce381143A259B92f1ED" - ] -} diff --git a/contracts/scripts/files/sepoliaDeployedContracts.json b/contracts/scripts/files/sepoliaDeployedContracts.json deleted file mode 100644 index 9e26dfeeb..000000000 --- a/contracts/scripts/files/sepoliaDeployedContracts.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/contracts/scripts/populateLookup.ts b/contracts/scripts/populateLookup.ts index 615d14c83..c13015d16 100644 --- a/contracts/scripts/populateLookup.ts +++ b/contracts/scripts/populateLookup.ts @@ -2,6 +2,7 @@ import { ethers, Wallet } from 'ethers' import { DeployedContracts, getConfig, getJsonFile } from './common' import { populateLookup } from './boldUpgradeFunctions' import dotenv from 'dotenv' +import path from 'path' dotenv.config() @@ -18,22 +19,26 @@ async function main() { } const wallet = new Wallet(l1PrivKey, l1Rpc) - const configLocation = process.env.CONFIG_LOCATION - if (!configLocation) { - throw new Error('CONFIG_LOCATION env variable not set') + const configNetworkName = process.env.CONFIG_NETWORK_NAME + if (!configNetworkName) { + throw new Error('CONFIG_NETWORK_NAME env variable not set') } - const config = await getConfig(configLocation, l1Rpc) + const config = await getConfig(configNetworkName, l1Rpc) - const deployedContractsLocation = process.env.DEPLOYED_CONTRACTS_LOCATION - if (!deployedContractsLocation) { - throw new Error('DEPLOYED_CONTRACTS_LOCATION env variable not set') + const deployedContractsDir = process.env.DEPLOYED_CONTRACTS_DIR + if (!deployedContractsDir) { + throw new Error('DEPLOYED_CONTRACTS_DIR env variable not set') } + const deployedContractsLocation = path.join( + deployedContractsDir, + configNetworkName + 'DeployedContracts.json' + ) const deployedContracts = getJsonFile( deployedContractsLocation ) as DeployedContracts if (!deployedContracts?.preImageHashLookup) { throw new Error( - 'preImageHashLookup not found in DEPLOYED_CONTRACTS_LOCATION' + 'preImageHashLookup not found in ' + deployedContractsLocation ) } diff --git a/contracts/scripts/prepareBoldUpgrade.ts b/contracts/scripts/prepareBoldUpgrade.ts index 51171d63d..4477ed846 100644 --- a/contracts/scripts/prepareBoldUpgrade.ts +++ b/contracts/scripts/prepareBoldUpgrade.ts @@ -7,6 +7,7 @@ import { } from './common' import { deployBoldUpgrade } from './boldUpgradeFunctions' import dotenv from 'dotenv' +import path from 'path' dotenv.config() @@ -23,16 +24,20 @@ async function main() { } const wallet = new Wallet(l1PrivKey, l1Rpc) - const configLocation = process.env.CONFIG_LOCATION - if (!configLocation) { - throw new Error('CONFIG_LOCATION env variable not set') + const configNetworkName = process.env.CONFIG_NETWORK_NAME + if (!configNetworkName) { + throw new Error('CONFIG_NETWORK_NAME env variable not set') } - const config = await getConfig(configLocation, l1Rpc) + const config = await getConfig(configNetworkName, l1Rpc) - const deployedContractsLocation = process.env.DEPLOYED_CONTRACTS_LOCATION - if (!deployedContractsLocation) { - throw new Error('DEPLOYED_CONTRACTS_LOCATION env variable not set') + const deployedContractsDir = process.env.DEPLOYED_CONTRACTS_DIR + if (!deployedContractsDir) { + throw new Error('DEPLOYED_CONTRACTS_DIR env variable not set') } + const deployedContractsLocation = path.join( + deployedContractsDir, + configNetworkName + 'DeployedContracts.json' + ) // if the deployed contracts exists then we load it and combine // if not, then we just use the newly created item diff --git a/contracts/scripts/testLocalExecuteBoldUpgrade.ts b/contracts/scripts/testLocalExecuteBoldUpgrade.ts index bea4d8250..24c5aab7a 100644 --- a/contracts/scripts/testLocalExecuteBoldUpgrade.ts +++ b/contracts/scripts/testLocalExecuteBoldUpgrade.ts @@ -19,6 +19,7 @@ import { RollupMigratedEvent } from '../build/types/src/rollup/BOLDUpgradeAction import { abi as OldRollupAbi } from './files/OldRollupUserLogic.json' import { JsonRpcProvider } from '@ethersproject/providers' import { getAddress } from 'ethers/lib/utils' +import path from 'path' dotenv.config() @@ -32,6 +33,13 @@ type VerificationParams = { receipt: ContractReceipt } +const executors: {[key: string]: string} = { + // DAO L1 Timelocks + arb1: '0xE6841D92B0C345144506576eC13ECf5103aC7f49', + nova: '0xE6841D92B0C345144506576eC13ECf5103aC7f49', + sepolia: '0x6EC62D826aDc24AeA360be9cF2647c42b9Cdb19b' +} + async function getPreUpgradeState(l1Rpc: JsonRpcProvider, config: Config) { const oldRollupContract = new Contract( config.contracts.rollup, @@ -64,9 +72,9 @@ async function perform( config: Config, deployedContracts: DeployedContracts ) { - const executor = process.env.EXECUTOR + const executor = executors[process.env.CONFIG_NETWORK_NAME!] if (!executor) { - throw new Error('EXECUTOR env variable not set') + throw new Error('no executor found for CONFIG_NETWORK_NAME or CONFIG_NETWORK_NAME not set') } await l1Rpc.send('hardhat_impersonateAccount', [executor]) @@ -593,15 +601,20 @@ async function main() { l1RpcVal ) as JsonRpcProvider - const deployedContractsLocation = process.env.DEPLOYED_CONTRACTS_LOCATION - if (!deployedContractsLocation) { - throw new Error('DEPLOYED_CONTRACTS_LOCATION env variable not set') + const configNetworkName = process.env.CONFIG_NETWORK_NAME + if (!configNetworkName) { + throw new Error('CONFIG_NETWORK_NAME env variable not set') } - const configLocation = process.env.CONFIG_LOCATION - if (!configLocation) { - throw new Error('CONFIG_LOCATION env variable not set') + const config = await getConfig(configNetworkName, l1Rpc) + + const deployedContractsDir = process.env.DEPLOYED_CONTRACTS_DIR + if (!deployedContractsDir) { + throw new Error('DEPLOYED_CONTRACTS_DIR env variable not set') } - const config = await getConfig(configLocation, l1Rpc) + const deployedContractsLocation = path.join( + deployedContractsDir, + configNetworkName + 'DeployedContracts.json' + ) const deployedContracts = getJsonFile( deployedContractsLocation From 9732ce411a4b7493e8a9932b94b3be51e1e60240 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Thu, 13 Jun 2024 13:09:18 -0400 Subject: [PATCH 17/23] solgen --- solgen/go/rollupgen/rollupgen.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/solgen/go/rollupgen/rollupgen.go b/solgen/go/rollupgen/rollupgen.go index edbeb5052..ad589c2a6 100644 --- a/solgen/go/rollupgen/rollupgen.go +++ b/solgen/go/rollupgen/rollupgen.go @@ -1171,7 +1171,7 @@ func (_AssertionStateLib *AssertionStateLibTransactorRaw) Transact(opts *bind.Tr // BOLDUpgradeActionMetaData contains all meta data concerning the BOLDUpgradeAction contract. var BOLDUpgradeActionMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"l1Timelock\",\"type\":\"address\"},{\"internalType\":\"contractIOldRollup\",\"name\":\"rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"osp\",\"type\":\"address\"}],\"internalType\":\"structBOLDUpgradeAction.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rei\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"seqInbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"internalType\":\"structBOLDUpgradeAction.ProxyAdmins\",\"name\":\"proxyAdmins\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"seqInbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rei\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oldRollupUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newRollupUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newRollupAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"}],\"internalType\":\"structBOLDUpgradeAction.Implementations\",\"name\":\"implementations\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"challengePeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"stakeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"miniStakeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"anyTrustFastConfirmer\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"disableValidatorWhitelist\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"blockLeafSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bigStepLeafSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"smallStepLeafSize\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"numBigStepLevel\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"challengeGracePeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isDelayBufferable\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"threshold\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"replenishRateInBasis\",\"type\":\"uint64\"}],\"internalType\":\"structBufferConfig\",\"name\":\"bufferConfig\",\"type\":\"tuple\"}],\"internalType\":\"structBOLDUpgradeAction.Settings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"}],\"name\":\"RollupMigrated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ANY_TRUST_FAST_CONFIRMER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIGSTEP_LEAF_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_LEAF_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CHALLENGE_GRACE_PERIOD_BLOCKS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CHALLENGE_PERIOD_BLOCKS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CONFIRM_PERIOD_BLOCKS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DISABLE_VALIDATOR_WHITELIST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_CHALLENGE_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_INBOX\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_NEW_ROLLUP_ADMIN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_NEW_ROLLUP_USER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_OUTBOX\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_PATCHED_OLD_ROLLUP_USER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_REI\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_SEQUENCER_INBOX\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INBOX\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IS_DELAY_BUFFERABLE\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_TIMELOCK\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINI_STAKE_AMOUNTS_STORAGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NUM_BIGSTEP_LEVEL\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OLD_ROLLUP\",\"outputs\":[{\"internalType\":\"contractIOldRollup\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OSP\",\"outputs\":[{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OUTBOX\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PREIMAGE_LOOKUP\",\"outputs\":[{\"internalType\":\"contractStateHashPreImageLookup\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_ADMIN_BRIDGE\",\"outputs\":[{\"internalType\":\"contractProxyAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_ADMIN_INBOX\",\"outputs\":[{\"internalType\":\"contractProxyAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_ADMIN_OUTBOX\",\"outputs\":[{\"internalType\":\"contractProxyAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_ADMIN_REI\",\"outputs\":[{\"internalType\":\"contractProxyAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_ADMIN_SEQUENCER_INBOX\",\"outputs\":[{\"internalType\":\"contractProxyAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REI\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REPLENISH_RATE_IN_BASIS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROLLUP_READER\",\"outputs\":[{\"internalType\":\"contractRollupReader\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SECONDS_PER_SLOT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEQ_INBOX\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SMALLSTEP_LEAF_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKE_AMOUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKE_TOKEN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"THRESHOLD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"validators\",\"type\":\"address[]\"}],\"name\":\"perform\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6105a06040523480156200001257600080fd5b50604051620084273803806200842783398101604081905262000035916200079c565b83516001600160a01b039081166101005260208086015182166101205260408087015183166101405260608088015184166101605260808089015185166101805260a089015185166101a05260c089015185166101c05260e0890151851661038052875185166103a0529287015184166103c0528682015184166103e052860151831661040052908501519091166104205251620000d390620002c2565b604051809103906000f080158015620000f0573d6000803e3d6000fd5b506001600160a01b03166104405260208401516040516200011190620002d0565b6001600160a01b039091168152602001604051809103906000f0801580156200013e573d6000803e3d6000fd5b506001600160a01b0390811661046052825181166104805260208084015182166104a05260408085015183166104c05260608086015184166104e05260808087015185166105005260a08088015186166105205260c088015186166105405260e08801518616610560526101008801518616610580528601516102605285516001600160401b039081166101e0529386015190931661020052848201519093166102205291830151610240528201519051620001fa90620002de565b620002069190620008c3565b604051809103906000f08015801562000223573d6000803e3d6000fd5b506001600160a01b039081166102e05260c0808301519091166102805260e08083015115156102a05261010083015160805261012083015160a05261014083015190915261016082015160ff1690526101808101516001600160401b039081166102c0526101a08201511515610300526101c0909101805160200151821661032052805151821661034052516040015116610360525062000909915050565b610a2d8062006b7783390190565b610be380620075a483390190565b6102a0806200818783390190565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715620003285762000328620002ec565b60405290565b6040516101e081016001600160401b0381118282101715620003285762000328620002ec565b60405161010081016001600160401b0381118282101715620003285762000328620002ec565b6001600160a01b03811681146200039057600080fd5b50565b8051620003a0816200037a565b919050565b600060a08284031215620003b857600080fd5b60405160a081016001600160401b0381118282101715620003dd57620003dd620002ec565b80604052508091508251620003f2816200037a565b8152602083015162000404816200037a565b6020820152604083015162000419816200037a565b604082015260608301516200042e816200037a565b6060820152608083015162000443816200037a565b6080919091015292915050565b600061012082840312156200046457600080fd5b6200046e62000302565b90506200047b8262000393565b81526200048b6020830162000393565b60208201526200049e6040830162000393565b6040820152620004b16060830162000393565b6060820152620004c46080830162000393565b6080820152620004d760a0830162000393565b60a0820152620004ea60c0830162000393565b60c0820152620004fd60e0830162000393565b60e08201526101006200051281840162000393565b9082015292915050565b80516001600160401b0381168114620003a057600080fd5b600082601f8301126200054657600080fd5b815160206001600160401b0380831115620005655762000565620002ec565b8260051b604051601f19603f830116810181811084821117156200058d576200058d620002ec565b604052938452858101830193838101925087851115620005ac57600080fd5b83870191505b84821015620005cd57815183529183019190830190620005b2565b979650505050505050565b80518015158114620003a057600080fd5b805160ff81168114620003a057600080fd5b6000606082840312156200060e57600080fd5b604051606081016001600160401b0381118282101715620006335762000633620002ec565b60405290508062000644836200051c565b815262000654602084016200051c565b602082015262000667604084016200051c565b60408201525092915050565b600061022082840312156200068757600080fd5b620006916200032e565b90506200069e826200051c565b8152620006ae602083016200051c565b6020820152620006c16040830162000393565b60408201526060828101519082015260808201516001600160401b03811115620006ea57600080fd5b620006f88482850162000534565b60808301525060a082015160a08201526200071660c0830162000393565b60c08201526200072960e08301620005d8565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101606200075f818401620005e9565b90820152610180620007738382016200051c565b908201526101a062000787838201620005d8565b908201526101c06200051284848301620005fb565b6000806000808486036102e0811215620007b557600080fd5b61010080821215620007c657600080fd5b620007d062000354565b91508651620007df816200037a565b8252620007ef6020880162000393565b6020830152620008026040880162000393565b6040830152620008156060880162000393565b6060830152620008286080880162000393565b60808301526200083b60a0880162000393565b60a08301526200084e60c0880162000393565b60c08301526200086160e0880162000393565b60e08301528195506200087788828901620003a5565b945050506200088b866101a0870162000450565b6102c08601519092506001600160401b03811115620008a957600080fd5b620008b78782880162000673565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015620008fd57835183529284019291840191600101620008df565b50909695505050505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a0516102c0516102e05161030051610320516103405161036051610380516103a0516103c0516103e05161040051610420516104405161046051610480516104a0516104c0516104e0516105005161052051610540516105605161058051615ea562000cd2600039600081816104060152610a3901526000818161032f0152610bd70152600081816105360152610c060152600081816104dd01526116f701526000818161082a01526122680152600081816107da015261212c015260008181610639015261206501526000818161080201528181612427015281816125dd015261269c0152600081816108f20152611efc01526000818161058601528181610c3501528181610fb3015281816113720152818161146a0152818161151e0152818161178e015281816117bd0152611b86015260008181610852015281816118fd01526119c701526000818161055e015261208e0152600081816104b5015281816123f70152818161260501526126c001526000818161050e015261215601526000818161039c01528181610a5a0152611f2501526000818161037401526122920152600081816106d90152610d6d01526000818161094201526124b301526000818161061101526124530152600081816108ca015261248301526000818161091a015281816123d001526127b001526000818161073a0152611c890152600081816109830152611df30152600081816107010152818161117901526111c601526000818161087a0152611d9b0152600081816106610152611c4e0152600081816109fb0152611b600152600081816104560152611b310152600081816106b10152610d4c0152600081816103c40152611b0101526000818161076201528181610b3b015261203c01526000818161042e01528181610b6a0152818161223f01526122f301526000818161078a01528181610b990152818161210301526121b70152600081816108a201528181610b0c015281816123af015281816127d3015281816128d5015281816129bb01528181612a630152612ca60152600081816109ab01528181610add01528181611ed30152611fbb015260008181610689015281816112fb01528181611629015261171f0152600081816107b201528181610da50152611c1f0152600081816105ae0152611dca0152600081816109d30152611d6901526000818161047e0152611d430152600081816105e90152611d1d0152615ea56000f3fe60806040523480156200001157600080fd5b5060043610620003245760003560e01c806391ddb28511620001b1578063d1da2c5c11620000f5578063eb657a4e11620000a3578063ee9a31a2116200007a578063ee9a31a214620009a5578063fa28742014620009cd578063faf5625f14620009f557600080fd5b8063eb657a4e146200093c578063ebe03a931462000964578063ec4f74ce146200097d57600080fd5b8063d49d518111620000d8578063d49d518114620008c4578063dae7cb8b14620008ec578063e8180c29146200091457600080fd5b8063d1da2c5c1462000874578063d384cb95146200089c57600080fd5b8063be41b367116200015f578063c519d1511162000136578063c519d15114620007fc578063c897f55e1462000824578063cc8089bb146200084c57600080fd5b8063be41b3671462000784578063bf5e3d5214620007ac578063c21c423314620007d457600080fd5b8063b38d57f01162000194578063b38d57f014620006fb578063b5e00c3f1462000734578063b7010697146200075c57600080fd5b806391ddb28514620006ab5780639f9854e514620006d357600080fd5b8063304b907111620002795780635d9e24441162000227578063817cd31211620001fe578063817cd312146200063357806385e1f4d0146200065b5780638765240f146200068357600080fd5b80635d9e244414620005a8578063609fb50314620005e3578063785ffb37146200060b57600080fd5b80634692de5d116200025c5780634692de5d14620005305780634b2f51ef14620005585780634e0e75fb146200058057600080fd5b8063304b907114620004ff5780633c2b7840146200050857600080fd5b80631b142ea711620002d75780631ccc2cd111620002ba5780631ccc2cd114620004785780632cfb7ca314620004af5780632db93bdc14620004d757600080fd5b80631b142ea714620004285780631c39b672146200045057600080fd5b80630a54257d116200030c5780630a54257d14620003965780631047fc5214620003be57806310a662e2146200040057600080fd5b8062f9731e14620003295780630787484b146200036e575b600080fd5b620003517f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003e67f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff909116815260200162000365565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620004a07f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200162000365565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620004a0600c81565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620005d07f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff909116815260200162000365565b620004a07f000000000000000000000000000000000000000000000000000000000000000081565b620003e67f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620004a07f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003e67f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620007237f000000000000000000000000000000000000000000000000000000000000000081565b604051901515815260200162000365565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003e67f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620007237f000000000000000000000000000000000000000000000000000000000000000081565b620003e67f000000000000000000000000000000000000000000000000000000000000000081565b6200097b6200097536600462002faf565b62000a1d565b005b620003e67f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620004a07f000000000000000000000000000000000000000000000000000000000000000081565b620004a07f000000000000000000000000000000000000000000000000000000000000000081565b62000a27620012f9565b600062000a3362001780565b905060007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060405162000a879062002d25565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f08015801562000aca573d6000803e3d6000fd5b50905060006040518061012001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001836001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bc45e0ae6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c92573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cb891906200305a565b6001600160a01b0316815250905060008360405160200162000cdb919062003384565b604051602081830303815290604052805190602001209050600062000d2d826040518060200162000d0c9062002d33565b6020820181038252601f19601f820116604052508051906020012062001e30565b905062000d3a8162001ebc565b836001600160a01b0316631a72d54c827f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008961014001518a61016001518b61018001518c602001517f00000000000000000000000000000000000000000000000000000000000000008e61020001518f61010001516040518b63ffffffff1660e01b815260040162000df79a9998979695949392919062003399565b600060405180830381600087803b15801562000e1257600080fd5b505af115801562000e27573d6000803e3d6000fd5b5050505060008260405162000e3c9062002d33565b8190604051809103906000f590508015801562000e5d573d6000803e3d6000fd5b509050816001600160a01b0316816001600160a01b03161462000ec75760405162461bcd60e51b815260206004820152601560248201527f554e455850435445445f524f4c4c55505f41444452000000000000000000000060448201526064015b60405180910390fd5b608086018051309091526040517fd384644b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063d384644b9062000f1a908a90899060040162003416565b600060405180830381600087803b15801562000f3557600080fd5b505af115801562000f4a573d6000803e3d6000fd5b50505050875160001462001177576000885167ffffffffffffffff81111562000f775762000f7762002ed2565b60405190808252806020026020018201604052801562000fa1578160200160208202803683370190505b50905060005b8951811015620010f7577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663facd743b8b838151811062000ff55762000ff5620034fc565b60200260200101516040518263ffffffff1660e01b81526004016200102991906001600160a01b0391909116815260200190565b602060405180830381865afa15801562001047573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200106d919062003528565b620010bb5760405162461bcd60e51b815260206004820152601860248201527f554e45585045435445445f4e45575f56414c494441544f520000000000000000604482015260640162000ebe565b6001828281518110620010d257620010d2620034fc565b9115156020928302919091019091015280620010ee816200355c565b91505062000fa7565b506040517fa3ffb7720000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063a3ffb7729062001141908c908590600401620035d2565b600060405180830381600087803b1580156200115c57600080fd5b505af115801562001171573d6000803e3d6000fd5b50505050505b7f00000000000000000000000000000000000000000000000000000000000000001562001235576040517fa2b4f1d80000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000151560048201526001600160a01b0383169063a2b4f1d890602401600060405180830381600087803b1580156200121b57600080fd5b505af115801562001230573d6000803e3d6000fd5b505050505b6040517f13af40350000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301528316906313af403590602401600060405180830381600087803b1580156200129257600080fd5b505af1158015620012a7573d6000803e3d6000fd5b5050604080516001600160a01b0380881682528a1660208201527f7e5cc5c3fce046d868d5918548df8d3e8ef9f09e6fb30a68081f1f1348cd0314935001905060405180910390a15050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200135557600080fd5b505af11580156200136a573d6000803e3d6000fd5b5050505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dff697876040518163ffffffff1660e01b8152600401602060405180830381865afa158015620013cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013f5919062003648565b905060328167ffffffffffffffff1611156200140f575060325b60005b8167ffffffffffffffff168167ffffffffffffffff161015620016c6576040517f6ddd374400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636ddd374490602401602060405180830381865afa158015620014ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014e091906200305a565b6040517fa23c44b10000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063a23c44b19060240160a060405180830381865afa15801562001566573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200158c919062003666565b905080608001518015620015ac5750606081015167ffffffffffffffff16155b15620016ae57604080516001808252818301909252600091602080830190803683370190505090508281600081518110620015eb57620015eb620034fc565b6001600160a01b0392831660209182029290920101526040517f7c75c2980000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000090911690637c75c2989062001662908490600401620036f9565b600060405180830381600087803b1580156200167d57600080fd5b505af115801562001692573d6000803e3d6000fd5b50505050600185620016a591906200370e565b945050620016be565b82620016ba8162003739565b9350505b505062001412565b506040517f0d40a0fd0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000001690630d40a0fd90602401600060405180830381600087803b1580156200176457600080fd5b505af115801562001779573d6000803e3d6000fd5b5050505050565b6200178a62002d41565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166392c8134c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166365f7f80d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001840919062003648565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff909116600482015260240161018060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018c5919062003763565b516040517f8eaa6ac00000000000000000000000000000000000000000000000000000000081526004810182905290915060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690638eaa6ac09060240160c060405180830381865afa1580156200194d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019739190620038b7565b915091506200198162002e4b565b82518152602080840151908201906002811115620019a357620019a36200316e565b90816002811115620019b957620019b96200316e565b905250836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166331644130620019f7846200236d565b856040518363ffffffff1660e01b815260040162001a1792919062003988565b602060405180830381865afa15801562001a35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a5b9190620039bf565b1462001aaa5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206c617465737420657865637574696f6e2068617368000000604482015260640162000ebe565b62001ad66040518060800160405280600081526020016000815260200160008152602001600081525090565b60408051606081018252600080825260208201819052918101919091526040518061026001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638ee1a1266040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c099190620039bf565b8152602001306001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020016040518060200160405280600081525081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b0ec2ae16040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001ce6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001d109190810190620039d9565b81526020018381526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020018481526020018581526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000060ff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16815260200182815250965050505050505090565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000905b90505b92915050565b60405163266a23b160e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081811660048401527f000000000000000000000000000000000000000000000000000000000000000082166024840152917f0000000000000000000000000000000000000000000000000000000000000000909116906399a88ec490604401600060405180830381600087803b15801562001f6c57600080fd5b505af115801562001f81573d6000803e3d6000fd5b50506040517f919cc7060000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301527f000000000000000000000000000000000000000000000000000000000000000016925063919cc7069150602401600060405180830381600087803b1580156200200257600080fd5b505af115801562002017573d6000803e3d6000fd5b5050505062002025620023ad565b60405163266a23b160e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081811660048401527f000000000000000000000000000000000000000000000000000000000000000082166024840152917f0000000000000000000000000000000000000000000000000000000000000000909116906399a88ec490604401600060405180830381600087803b158015620020d557600080fd5b505af1158015620020ea573d6000803e3d6000fd5b505060405163266a23b160e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081811660048401527f00000000000000000000000000000000000000000000000000000000000000008216602484015293507f00000000000000000000000000000000000000000000000000000000000000001691506399a88ec490604401600060405180830381600087803b1580156200219c57600080fd5b505af1158015620021b1573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636ae71f126040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200221157600080fd5b505af115801562002226573d6000803e3d6000fd5b505060405163266a23b160e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081811660048401527f00000000000000000000000000000000000000000000000000000000000000008216602484015293507f00000000000000000000000000000000000000000000000000000000000000001691506399a88ec490604401600060405180830381600087803b158015620022d857600080fd5b505af1158015620022ed573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636ae71f126040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200234d57600080fd5b505af115801562002362573d6000803e3d6000fd5b505050505050505050565b6200237762002e74565b60405180604001604052808360000151815260200183602001516002811115620023a557620023a56200316e565b905292915050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000015620025be577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639623609d827f000000000000000000000000000000000000000000000000000000000000000060405180606001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16815250604051602401620024f1919062003a68565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa655d93700000000000000000000000000000000000000000000000000000000179052517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152620025849392919060040162003a9a565b600060405180830381600087803b1580156200259f57600080fd5b505af1158015620025b4573d6000803e3d6000fd5b5050505062002664565b60405163266a23b160e21b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906399a88ec490604401600060405180830381600087803b1580156200264a57600080fd5b505af11580156200265f573d6000803e3d6000fd5b505050505b6040517f204e1c7a0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f00000000000000000000000000000000000000000000000000000000000000008116917f00000000000000000000000000000000000000000000000000000000000000009091169063204e1c7a90602401602060405180830381865afa1580156200270a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200273091906200305a565b6001600160a01b031614620027ae5760405162461bcd60e51b815260206004820152603160248201527f44656c61794275666665723a206e65772073657120696e626f7820696d706c6560448201527f6d656e746174696f6e206e6f7420736574000000000000000000000000000000606482015260840162000ebe565b7f000000000000000000000000000000000000000000000000000000000000000015157f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634b678a666040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002830573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002856919062003528565b151514620028cd5760405162461bcd60e51b815260206004820152602660248201527f44656c61794275666665723a20697344656c617942756666657261626c65206e60448201527f6f74207365740000000000000000000000000000000000000000000000000000606482015260840162000ebe565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa15801562002932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002958919062003ad1565b93509350935093506000600c8362002971919062003b1e565b15620029975762002984600c8462003b35565b6200299190600162003b4c565b620029a4565b620029a4600c8462003b35565b9050848111620029b55784620029b7565b805b94507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b31761f86040518060800160405280888152602001878152602001868152602001858152506040518263ffffffff1660e01b815260040162002a27919062003b62565b600060405180830381600087803b15801562002a4257600080fd5b505af115801562002a57573d6000803e3d6000fd5b505050506000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa15801562002ac0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ae6919062003ad1565b935093509350935088841462002b3f5760405162461bcd60e51b815260206004820181905260248201527f44656c61794275666665723a2064656c6179426c6f636b73206e6f7420736574604482015260640162000ebe565b86821462002bb65760405162461bcd60e51b815260206004820152602160248201527f44656c61794275666665723a2064656c61795365636f6e6473206e6f7420736560448201527f7400000000000000000000000000000000000000000000000000000000000000606482015260840162000ebe565b87831462002c2d5760405162461bcd60e51b815260206004820152602160248201527f44656c61794275666665723a20667574757265426c6f636b73206e6f7420736560448201527f7400000000000000000000000000000000000000000000000000000000000000606482015260840162000ebe565b85811462002ca45760405162461bcd60e51b815260206004820152602260248201527f44656c61794275666665723a206675747572655365636f6e6473206e6f74207360448201527f6574000000000000000000000000000000000000000000000000000000000000606482015260840162000ebe565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636ae71f126040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562002d0057600080fd5b505af115801562002d15573d6000803e3d6000fd5b5050505050505050505050505050565b610ed38062003b8f83390190565b61140e8062004a6283390190565b604051806102600160405280600067ffffffffffffffff16815260200160006001600160a01b03168152602001600081526020016000801916815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001606081526020016060815260200162002de06040518060800160405280600081526020016000815260200160008152602001600081525090565b815260200160008152602001600081526020016000815260200162002e0462002e4b565b81526000602080830182905260408084018390526060808501849052608085018490528151908101825283815291820183905281019190915260a09091015290565b905290565b604051806060016040528062002e6062002e95565b815260200160008152600060209091015290565b604051806040016040528062002e8962002e95565b81526020016000905290565b604051806040016040528062002eaa62002eb4565b815260200162002e465b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff8111828210171562002f0f5762002f0f62002ed2565b60405290565b6040805190810167ffffffffffffffff8111828210171562002f0f5762002f0f62002ed2565b604051601f8201601f1916810167ffffffffffffffff8111828210171562002f675762002f6762002ed2565b604052919050565b600067ffffffffffffffff82111562002f8c5762002f8c62002ed2565b5060051b60200190565b6001600160a01b038116811462002fac57600080fd5b50565b6000602080838503121562002fc357600080fd5b823567ffffffffffffffff81111562002fdb57600080fd5b8301601f8101851362002fed57600080fd5b80356200300462002ffe8262002f6f565b62002f3b565b81815260059190911b820183019083810190878311156200302457600080fd5b928401925b828410156200304f5783356200303f8162002f96565b8252928401929084019062003029565b979650505050505050565b6000602082840312156200306d57600080fd5b81516200307a8162002f96565b9392505050565b6000815180845260005b81811015620030a9576020818501810151868301820152016200308b565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015620030fb57815187529582019590820190600101620030dd565b509495945050505050565b80518260005b60028110156200312d5782518252602092830192909101906001016200310c565b5050506020808201516040840160005b60028110156200316657825167ffffffffffffffff16825291830191908301906001016200313d565b505050505050565b634e487b7160e01b600052602160045260246000fd5b60038110620031a357634e487b7160e01b600052602160045260246000fd5b9052565b620031b482825162003106565b6020810151620031c8608084018262003184565b506040015160a09190910152565b805167ffffffffffffffff16825260006103a060208301516200320460208601826001600160a01b03169052565b50604083015160408501526060830151606085015260808301516200323460808601826001600160a01b03169052565b5060a08301516200325060a08601826001600160a01b03169052565b5060c083015160c085015260e08301518160e0860152620032748286018262003081565b9150506101008084015185830382870152620032918382620030c9565b6101208681015180518983015260208101516101408a015260408101516101608a015260608101516101808a01529194509250905050506101408301516101a0818187015261016085015191506101c0828188015261018086015192506101e0838189015282870151935061020092506200330f83890185620031a7565b908601516102c08801528501516001600160a01b03166102e087015284015160ff166103008601525061022083015167ffffffffffffffff908116610320860152610240840151805182166103408701526020810151821661036087015260408101519091166103808601525b509392505050565b60208152600062001eb36020830184620031d6565b60006101406001600160a01b03808e16845267ffffffffffffffff8d166020850152808c1660408501528a60608501528960808501528860a085015280881660c085015280871660e08501525060ff8516610100840152806101208401526200340581840185620030c9565b9d9c50505050505050505050505050565b60006101408083526200342c81840186620031d6565b9150506001600160a01b03835116602083015260208301516200345a60408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516001600160a01b03811660808401525060808301516001600160a01b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160a01b03811660e08401525060e0830151610100620034e1818501836001600160a01b03169052565b8401516001600160a01b03811661012085015290506200337c565b634e487b7160e01b600052603260045260246000fd5b805180151581146200352357600080fd5b919050565b6000602082840312156200353b57600080fd5b62001eb38262003512565b634e487b7160e01b600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003590576200359062003546565b5060010190565b600081518084526020808501945080840160005b83811015620030fb5781516001600160a01b031687529582019590820190600101620035ab565b604081526000620035e7604083018562003597565b82810360208481019190915284518083528582019282019060005b818110156200362257845115158352938301939183019160010162003602565b5090979650505050505050565b805167ffffffffffffffff811681146200352357600080fd5b6000602082840312156200365b57600080fd5b62001eb3826200362f565b600060a082840312156200367957600080fd5b60405160a0810181811067ffffffffffffffff821117156200369f576200369f62002ed2565b60405282518152620036b4602084016200362f565b6020820152620036c7604084016200362f565b6040820152620036da606084016200362f565b6060820152620036ed6080840162003512565b60808201529392505050565b60208152600062001eb3602083018462003597565b67ffffffffffffffff82811682821603908082111562003732576200373262003546565b5092915050565b600067ffffffffffffffff80831681810362003759576200375962003546565b6001019392505050565b600061018082840312156200377757600080fd5b6200378162002ee8565b825181526020830151602082015260408301516040820152620037a7606084016200362f565b6060820152620037ba608084016200362f565b6080820152620037cd60a084016200362f565b60a0820152620037e060c084016200362f565b60c0820152620037f360e084016200362f565b60e0820152610100620038088185016200362f565b908201526101206200381c8482016200362f565b90820152610140620038308482016200362f565b90820152610160928301519281019290925250919050565b600082601f8301126200385a57600080fd5b6200386462002f15565b8060408401858111156200387757600080fd5b845b818110156200389c576200388d816200362f565b84526020938401930162003879565b509095945050505050565b8051600381106200352357600080fd5b60008082840360c0811215620038cc57600080fd5b60a0811215620038db57600080fd5b620038e562002f15565b6080821215620038f457600080fd5b620038fe62002f15565b915085601f8601126200391057600080fd5b6200391a62002f15565b8060408701888111156200392d57600080fd5b875b81811015620039495780518452602093840193016200392f565b5081855262003959898262003848565b60208601525050508181526200397260808601620038a7565b602082015260a094909401519395939450505050565b600060c0820190506200399d82855162003106565b6020840151620039b1608084018262003184565b508260a08301529392505050565b600060208284031215620039d257600080fd5b5051919050565b60006020808385031215620039ed57600080fd5b825167ffffffffffffffff81111562003a0557600080fd5b8301601f8101851362003a1757600080fd5b805162003a2862002ffe8262002f6f565b81815260059190911b8201830190838101908783111562003a4857600080fd5b928401925b828410156200304f5783518252928401929084019062003a4d565b6060810162001eb68284805167ffffffffffffffff908116835260208083015182169084015260409182015116910152565b60006001600160a01b0380861683528085166020840152506060604083015262003ac8606083018462003081565b95945050505050565b6000806000806080858703121562003ae857600080fd5b505082516020840151604085015160609095015191969095509092509050565b634e487b7160e01b600052601260045260246000fd5b60008262003b305762003b3062003b08565b500690565b60008262003b475762003b4762003b08565b500490565b8082018082111562001eb65762001eb662003546565b815181526020808301519082015260408083015190820152606080830151908201526080810162001eb656fe608060405260405162000ed338038062000ed3833981016040819052620000269162000487565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ba565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b6200023e1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000eac60279139620002f8565b9392505050565b60006200018060008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a81620003e160201b6200026a1760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620003de60201b620001fa1760201c565b60606001600160a01b0384163b620003625760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001f1565b600080856001600160a01b0316856040516200037f919062000567565b600060405180830381855af49150503d8060008114620003bc576040519150601f19603f3d011682016040523d82523d6000602084013e620003c1565b606091505b509092509050620003d4828286620003f0565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620004015750816200014f565b825115620004125782518084602001fd5b8160405162461bcd60e51b8152600401620001f1919062000585565b80516001600160a01b03811681146200044657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200047e57818101518382015260200162000464565b50506000910152565b6000806000606084860312156200049d57600080fd5b620004a8846200042e565b9250620004b8602085016200042e565b60408501519092506001600160401b0380821115620004d657600080fd5b818601915086601f830112620004eb57600080fd5b8151818111156200050057620005006200044b565b604051601f8201601f19908116603f011681019083821181831017156200052b576200052b6200044b565b816040528281528960208487010111156200054557600080fd5b6200055883602083016020880162000461565b80955050505050509250925092565b600082516200057b81846020870162000461565b9190910192915050565b6020815260008251806020840152620005a681604085016020870162000461565b601f01601f19169190910160400192915050565b6108c280620005ca6000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610736565b610128565b61006b6100a3366004610751565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610736565b6101fd565b34801561010557600080fd5b506100bd61021d565b610116610279565b610126610121610329565b610333565b565b610130610357565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061038a565b50565b61015a61010e565b61016d610357565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061038a915050565b505050565b6101bf61010e565b60006101d6610357565b6001600160a01b031633036101f2576101ed610329565b905090565b6101fa61010e565b90565b610205610357565b6001600160a01b0316330361015d5761015a816103b5565b6000610227610357565b6001600160a01b031633036101f2576101ed610357565b6060610263838360405180606001604052806027815260200161086660279139610409565b9392505050565b6001600160a01b03163b151590565b610281610357565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6104fd565b3660008037600080366000845af43d6000803e808015610352573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61039383610525565b6000825111806103a05750805b156101bf576103af838361023e565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103de610357565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610565565b60606001600160a01b0384163b6104885760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610320565b600080856001600160a01b0316856040516104a391906107f8565b600060405180830381855af49150503d80600081146104de576040519150601f19603f3d011682016040523d82523d6000602084013e6104e3565b606091505b50915091506104f382828661063d565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61037b565b61052e81610676565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105e15760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610320565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060831561064c575081610263565b82511561065c5782518084602001fd5b8160405162461bcd60e51b81526004016103209190610814565b6001600160a01b0381163b6106f35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610320565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610604565b80356001600160a01b038116811461073157600080fd5b919050565b60006020828403121561074857600080fd5b6102638261071a565b60008060006040848603121561076657600080fd5b61076f8461071a565b9250602084013567ffffffffffffffff8082111561078c57600080fd5b818601915086601f8301126107a057600080fd5b8135818111156107af57600080fd5b8760208285010111156107c157600080fd5b6020830194508093505050509250925092565b60005b838110156107ef5781810151838201526020016107d7565b50506000910152565b6000825161080a8184602087016107d4565b9190910192915050565b60208152600082518060208401526108338160408501602087016107d4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c1888b421836e473bfc3e72d153dc5c76569ce769e37cfa444506490e142daa564736f6c63430008110033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564608060405234801561001057600080fd5b506113ee806100206000396000f3fe6080604052600436106100225760003560e01c8063d384644b1461003957610031565b366100315761002f610059565b005b61002f610059565b34801561004557600080fd5b5061002f610054366004610d95565b61006b565b6100696100646101bd565b6102a1565b565b60006100756102ca565b6001600160a01b031614801561009b575060006100906102fd565b6001600160a01b0316145b80156100b7575060006100ac610325565b6001600160a01b0316145b156101b5576101b18160c0015183836040516024016100d792919061113d565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9e7e6aa70000000000000000000000000000000000000000000000000000000017905260e08601519087015191516001600160a01b0390921660248301529060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052608087015161034d565b5050565b6101b1610059565b600060043610156102155760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f46554e435f53494700000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000336102206102ca565b6001600160a01b03160361023b576102366102fd565b610243565b610243610325565b90506001600160a01b0381163b61029c5760405162461bcd60e51b815260206004820152601360248201527f5441524745545f4e4f545f434f4e545241435400000000000000000000000000604482015260640161020c565b919050565b3660008037600080366000845af43d6000803e8080156102c0573d6000f35b3d6000fd5b505050565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102ee565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6102ee565b61037860017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610461132b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103146103a6576103a661134c565b6103d160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61132b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc146103ff576103ff61134c565b61042a60017f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546e61132b565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d146104585761045861134c565b61046181610480565b61046d858560006104d7565b61047983836000610502565b5050505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104a96102ca565b604080516001600160a01b03928316815291841660208301520160405180910390a16104d48161050b565b50565b6104e0836105e3565b6000825111806104ed5750805b156102c5576104fc8383610623565b50505050565b6104e083610651565b6001600160a01b0381166105875760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161020c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6105ec81610691565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610648838360405180606001604052806027815260200161139260279139610735565b90505b92915050565b61065a8161082b565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b6001600160a01b0381163b61070e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161020c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105aa565b60606001600160a01b0384163b6107b45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161020c565b600080856001600160a01b0316856040516107cf9190611362565b600060405180830381855af49150503d806000811461080a576040519150601f19603f3d011682016040523d82523d6000602084013e61080f565b606091505b509150915061081f8282866108cf565b925050505b9392505050565b6001600160a01b0381163b6108a85760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e7472616374000000000000000000606482015260840161020c565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6105aa565b606083156108de575081610824565b8251156108ee5782518084602001fd5b8160405162461bcd60e51b815260040161020c919061137e565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561094157610941610908565b60405290565b6040805190810167ffffffffffffffff8111828210171561094157610941610908565b604051610120810167ffffffffffffffff8111828210171561094157610941610908565b604051610260810167ffffffffffffffff8111828210171561094157610941610908565b604051601f8201601f1916810167ffffffffffffffff811182821017156109db576109db610908565b604052919050565b803567ffffffffffffffff8116811461029c57600080fd5b80356001600160a01b038116811461029c57600080fd5b600082601f830112610a2357600080fd5b813567ffffffffffffffff811115610a3d57610a3d610908565b610a506020601f19601f840116016109b2565b818152846020838601011115610a6557600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610a9357600080fd5b8135602067ffffffffffffffff821115610aaf57610aaf610908565b8160051b610abe8282016109b2565b9283528481018201928281019087851115610ad857600080fd5b83870192505b84831015610af757823582529183019190830190610ade565b979650505050505050565b600060808284031215610b1457600080fd5b6040516080810181811067ffffffffffffffff82111715610b3757610b37610908565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b600082601f830112610b7957600080fd5b610b81610947565b806040840185811115610b9357600080fd5b845b81811015610bb457610ba6816109e3565b845260209384019301610b95565b509095945050505050565b80356003811061029c57600080fd5b600081830360c0811215610be157600080fd5b610be961091e565b91506080811215610bf957600080fd5b50610c02610947565b83601f840112610c1157600080fd5b610c19610947565b806040850186811115610c2b57600080fd5b855b81811015610c45578035845260209384019301610c2d565b50818452610c538782610b68565b60208501525050508152610c6960808301610bbf565b602082015260a0820135604082015292915050565b803560ff8116811461029c57600080fd5b600060608284031215610ca157600080fd5b610ca961091e565b9050610cb4826109e3565b8152610cc2602083016109e3565b6020820152610cd3604083016109e3565b604082015292915050565b60006101208284031215610cf157600080fd5b610cf961096a565b9050610d04826109fb565b8152610d12602083016109fb565b6020820152610d23604083016109fb565b6040820152610d34606083016109fb565b6060820152610d45608083016109fb565b6080820152610d5660a083016109fb565b60a0820152610d6760c083016109fb565b60c0820152610d7860e083016109fb565b60e0820152610100610d8b8184016109fb565b9082015292915050565b600080610140808486031215610daa57600080fd5b833567ffffffffffffffff80821115610dc257600080fd5b908501906103a08288031215610dd757600080fd5b610ddf61098e565b610de8836109e3565b8152610df6602084016109fb565b60208201526040830135604082015260608301356060820152610e1b608084016109fb565b6080820152610e2c60a084016109fb565b60a082015260c083013560c082015260e083013582811115610e4d57600080fd5b610e5989828601610a12565b60e0830152506101008084013583811115610e7357600080fd5b610e7f8a828701610a82565b8284015250506101209150610e9688838501610b02565b828201526101a0915081830135848201526101c09350838301356101608201526101e080840135610180830152610200610ed28a828701610bce565b848401526102c085013586840152610eed6102e086016109fb565b82840152610efe6103008601610c7e565b9083015250610f1061032084016109e3565b610220820152610f24886103408501610c8f565b61024082015280955050505050610f3e8460208501610cde565b90509250929050565b60005b83811015610f62578181015183820152602001610f4a565b50506000910152565b60008151808452610f83816020860160208601610f47565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015610fc757815187529582019590820190600101610fab565b509495945050505050565b60038110610ff057634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b600281101561101b578251825260209283019290910190600101610ffc565b505050602090810151906040840160005b600281101561105357835167ffffffffffffffff168252928201929082019060010161102c565b505082015190506110676080840182610fd2565b506040015160a09190910152565b6001600160a01b038082511683528060208301511660208401528060408301511660408401525060608101516110b660608401826001600160a01b03169052565b5060808101516110d160808401826001600160a01b03169052565b5060a08101516110ec60a08401826001600160a01b03169052565b5060c081015161110760c08401826001600160a01b03169052565b5060e081015161112260e08401826001600160a01b03169052565b50610100818101516001600160a01b038116848301526104fc565b600061014080835261115b818401865167ffffffffffffffff169052565b6020850151610160611177818601836001600160a01b03169052565b604087015191506101808281870152606088015192506101a08381880152608089015193506101c06111b3818901866001600160a01b03169052565b60a08a015194506101e06111d1818a01876001600160a01b03169052565b60c08b0151955061020086818b015260e08c015196506102206103a0818c01526111ff6104e08c0189610f6b565b97506101008d01516102407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08d8b0301818e015261123d8a83610f97565b99506101208f015191506112766102608e0183805182526020810151602083015260408101516040830152606081015160608301525050565b998e01516102e08d0152878e01516103008d0152868e01516103208d0152858e0151996112a76103408e018c610ff4565b948e01516104008d015250918c01516001600160a01b03166104208b01528b015160ff166104408a01528a015167ffffffffffffffff9081166104608a0152908a0151805182166104808a0152602081015182166104a08a015260408101519091166104c0890152945061131a92505050565b915061082490506020830184611075565b8181038181111561064b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b60008251611374818460208701610f47565b9190910192915050565b6020815260006106486020830184610f6b56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207000f262e4a68ed485ac638f102eeaeb35ce8732f42c868f124f4b40522e1b9464736f6c63430008110033a26469706673582212200f78c6fad960b8c620baa78541822958f60d9e09aea3c6bf127b7ed0dc09747864736f6c63430008110033608060405234801561001057600080fd5b50610a0d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806331644130146100465780638eaa6ac01461006c578063945c94941461008d575b600080fd5b61005961005436600461041d565b6100a2565b6040519081526020015b60405180910390f35b61007f61007a366004610448565b610193565b604051610063929190610483565b6100a061009b36600461050a565b6102bf565b005b60006101526100b636859003850185610598565b8051805160209182015192820151805190830151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081870152602d810194909452604d8401959095527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d850152911b1660758201528251808203605d018152607d909101909252815191012090565b8261016360a0860160808701610667565b6040516020016101759392919061068b565b60405160208183030381529060405280519060200120905092915050565b61019b6103ab565b600082815260208190526040812080546101b4906106c9565b80601f01602080910402602001604051908101604052809291908181526020018280546101e0906106c9565b801561022d5780601f106102025761010080835404028352916020019161022d565b820191906000526020600020905b81548152906001019060200180831161021057829003601f168201915b50505050508060200190518101906102459190610766565b909250905060008190036102ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f48617368206e6f7420796574207365740000000000000000000000000000000060448201526064015b60405180910390fd5b915091565b6102c982826100a2565b8314610331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f496e76616c69642068617368000000000000000000000000000000000000000060448201526064016102b1565b818160405160200161034492919061088c565b60408051601f1981840301815291815260008581526020819052209061036a90826108f5565b507f14c0a6b8d81f5915dacfd85e41ae4798343ec29de408ac4c13360c7238ae0ad983838360405161039e939291906109b5565b60405180910390a1505050565b60405180604001604052806103be6103cb565b815260200160005b905290565b60405180604001604052806103de6103e7565b81526020016103c65b60405180604001604052806002906020820280368337509192915050565b600060a0828403121561041757600080fd5b50919050565b60008060c0838503121561043057600080fd5b61043a8484610405565b9460a0939093013593505050565b60006020828403121561045a57600080fd5b5035919050565b6003811061047f57634e487b7160e01b600052602160045260246000fd5b9052565b8251805160c0830191908360005b60028110156104b0578251825260209283019290910190600101610491565b505050602090810151906040840160005b60028110156104e857835167ffffffffffffffff16825292820192908201906001016104c1565b505085015190506104fc6080840182610461565b508260a08301529392505050565b600080600060e0848603121561051f57600080fd5b833592506105308560208601610405565b915060c084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561057957610579610540565b60405290565b67ffffffffffffffff8116811461059557600080fd5b50565b6000608082840312156105aa57600080fd5b6105b2610556565b83601f8401126105c157600080fd5b6105c9610556565b8060408501868111156105db57600080fd5b855b818110156105f55780358452602093840193016105dd565b5081845286605f87011261060857600080fd5b610610610556565b9250829150608086018781111561062657600080fd5b8082101561064b5781356106398161057f565b84526020938401939190910190610626565b50506020830152509392505050565b6003811061059557600080fd5b60006020828403121561067957600080fd5b81356106848161065a565b9392505050565b8381528260208201526000600383106106b457634e487b7160e01b600052602160045260246000fd5b5060f89190911b604082015260410192915050565b600181811c908216806106dd57607f821691505b60208210810361041757634e487b7160e01b600052602260045260246000fd5b600082601f83011261070e57600080fd5b610716610556565b80604084018581111561072857600080fd5b845b8181101561074b57805161073d8161057f565b84526020938401930161072a565b509095945050505050565b80516107618161065a565b919050565b60008082840360c081121561077a57600080fd5b60a081121561078857600080fd5b610790610556565b608082121561079e57600080fd5b6107a6610556565b915085601f8601126107b757600080fd5b6107bf610556565b8060408701888111156107d157600080fd5b875b818110156107eb5780518452602093840193016107d3565b508185526107f989826106fd565b602086015250505081815261081060808601610756565b602082015260a094909401519395939450505050565b6040818337604082016040820160005b600281101561086957813561084a8161057f565b67ffffffffffffffff1683526020928301929190910190600101610836565b505050608081013561087a8161065a565b6108876080840182610461565b505050565b60c0810161089a8285610826565b8260a08301529392505050565b601f82111561088757600081815260208120601f850160051c810160208610156108ce5750805b601f850160051c820191505b818110156108ed578281556001016108da565b505050505050565b815167ffffffffffffffff81111561090f5761090f610540565b6109238161091d84546106c9565b846108a7565b602080601f83116001811461095857600084156109405750858301515b600019600386901b1c1916600185901b1785556108ed565b600085815260208120601f198616915b8281101561098757888601518255948401946001909101908401610968565b50858210156109a55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b83815260e081016109c96020830185610826565b8260c083015294935050505056fea2646970667358221220878536b467a360e5d7d47c4735544955649e5a25f5dc24936fcb6802c7008b4864736f6c6343000811003360a060405234801561001057600080fd5b50604051610be3380380610be383398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610b206100c3600039600081816101a5015281816101f6015281816102b601528181610333015281816104500152818161051b0152818161058a0152818161060e01526106a50152610b206000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063a23c44b111610076578063cb23bcb51161005b578063cb23bcb5146101a0578063dff69787146101c7578063facd743b146101cf57600080fd5b8063a23c44b11461012f578063bc45e0ae1461019857600080fd5b806365f7f80d146100a85780636ddd3744146100ce5780638ee1a126146100f957806392c8134c1461010f575b600080fd5b6100b06101f2565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6100e16100dc36600461072b565b61027b565b6040516001600160a01b0390911681526020016100c5565b61010161032f565b6040519081526020016100c5565b61012261011d36600461072b565b6103b3565b6040516100c5919061074f565b61014261013d366004610868565b6104bc565b6040516100c59190600060a08201905082518252602083015167ffffffffffffffff8082166020850152806040860151166040850152806060860151166060850152505060808301511515608083015292915050565b6100e1610586565b6100e17f000000000000000000000000000000000000000000000000000000000000000081565b6100b061060a565b6101e26101dd366004610868565b61066a565b60405190151581526020016100c5565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166365f7f80d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102769190610895565b905090565b6040517f6ddd374400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636ddd374490602401602060405180830381865afa158015610305573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032991906108b2565b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638ee1a1266040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027691906108cf565b6040805161018081018252600080825260208201819052818301819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082018190526101208201819052610140820181905261016082015290517f92c8134c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff831660048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906392c8134c9060240161018060405180830381865afa158015610498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610939565b6040805160a08101825260008082526020820181905281830181905260608201819052608082015290517fa23c44b10000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a23c44b19060240160a060405180830381865afa158015610562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610a1b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bc45e0ae6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027691906108b2565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dff697876040518163ffffffff1660e01b8152600401602060405180830381865afa158015610252573d6000803e3d6000fd5b6040517ffacd743b0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063facd743b90602401602060405180830381865afa1580156106ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610acf565b67ffffffffffffffff8116811461072857600080fd5b50565b60006020828403121561073d57600080fd5b813561074881610712565b9392505050565b600061018082019050825182526020830151602083015260408301516040830152606083015161078b606084018267ffffffffffffffff169052565b5060808301516107a7608084018267ffffffffffffffff169052565b5060a08301516107c360a084018267ffffffffffffffff169052565b5060c08301516107df60c084018267ffffffffffffffff169052565b5060e08301516107fb60e084018267ffffffffffffffff169052565b506101008381015167ffffffffffffffff81168483015250506101208381015167ffffffffffffffff81168483015250506101408381015167ffffffffffffffff811684830152505061016092830151919092015290565b6001600160a01b038116811461072857600080fd5b60006020828403121561087a57600080fd5b813561074881610853565b805161089081610712565b919050565b6000602082840312156108a757600080fd5b815161074881610712565b6000602082840312156108c457600080fd5b815161074881610853565b6000602082840312156108e157600080fd5b5051919050565b604051610180810167ffffffffffffffff81118282101715610933577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6000610180828403121561094c57600080fd5b6109546108e8565b82518152602083015160208201526040830151604082015261097860608401610885565b606082015261098960808401610885565b608082015261099a60a08401610885565b60a08201526109ab60c08401610885565b60c08201526109bc60e08401610885565b60e08201526101006109cf818501610885565b908201526101206109e1848201610885565b908201526101406109f3848201610885565b90820152610160928301519281019290925250919050565b8051801515811461089057600080fd5b600060a08284031215610a2d57600080fd5b60405160a0810181811067ffffffffffffffff82111715610a77577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052825181526020830151610a8c81610712565b60208201526040830151610a9f81610712565b60408201526060830151610ab281610712565b6060820152610ac360808401610a0b565b60808201529392505050565b600060208284031215610ae157600080fd5b61074882610a0b56fea2646970667358221220d06d5ba6ce0a81ed539987273ea566effee0be21b9af8a1a6e271b55b2638fc964736f6c63430008110033608060405234801561001057600080fd5b506040516102a03803806102a083398101604081905261002f916100bf565b8051610042906000906020840190610049565b505061017c565b828054828255906000526020600020908101928215610084579160200282015b82811115610084578251825591602001919060010190610069565b50610090929150610094565b5090565b5b808211156100905760008155600101610095565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156100d257600080fd5b82516001600160401b03808211156100e957600080fd5b818501915085601f8301126100fd57600080fd5b81518181111561010f5761010f6100a9565b8060051b604051601f19603f83011681018181108582111715610134576101346100a9565b60405291825284820192508381018501918883111561015257600080fd5b938501935b8285101561017057845184529385019392850192610157565b98975050505050505050565b6101158061018b6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063b0ec2ae114602d575b600080fd5b60336047565b604051603e9190609d565b60405180910390f35b60606000805480602002602001604051908101604052809291908181526020018280548015609357602002820191906000526020600020905b8154815260200190600101908083116080575b5050505050905090565b6020808252825182820181905260009190848201906040850190845b8181101560d35783518352928401929184019160010160b9565b5090969550505050505056fea2646970667358221220904c624921e9454d730f989768076aae699d24c1c5307e98935f9cb64c34f4c364736f6c63430008110033", + Bin: "0x6105a06040523480156200001257600080fd5b50604051620084273803806200842783398101604081905262000035916200079c565b83516001600160a01b039081166101005260208086015182166101205260408087015183166101405260608088015184166101605260808089015185166101805260a089015185166101a05260c089015185166101c05260e0890151851661038052875185166103a0529287015184166103c0528682015184166103e052860151831661040052908501519091166104205251620000d390620002c2565b604051809103906000f080158015620000f0573d6000803e3d6000fd5b506001600160a01b03166104405260208401516040516200011190620002d0565b6001600160a01b039091168152602001604051809103906000f0801580156200013e573d6000803e3d6000fd5b506001600160a01b0390811661046052825181166104805260208084015182166104a05260408085015183166104c05260608086015184166104e05260808087015185166105005260a08088015186166105205260c088015186166105405260e08801518616610560526101008801518616610580528601516102605285516001600160401b039081166101e0529386015190931661020052848201519093166102205291830151610240528201519051620001fa90620002de565b620002069190620008c3565b604051809103906000f08015801562000223573d6000803e3d6000fd5b506001600160a01b039081166102e05260c0808301519091166102805260e08083015115156102a05261010083015160805261012083015160a05261014083015190915261016082015160ff1690526101808101516001600160401b039081166102c0526101a08201511515610300526101c0909101805160200151821661032052805151821661034052516040015116610360525062000909915050565b610a2d8062006b7783390190565b610be380620075a483390190565b6102a0806200818783390190565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715620003285762000328620002ec565b60405290565b6040516101e081016001600160401b0381118282101715620003285762000328620002ec565b60405161010081016001600160401b0381118282101715620003285762000328620002ec565b6001600160a01b03811681146200039057600080fd5b50565b8051620003a0816200037a565b919050565b600060a08284031215620003b857600080fd5b60405160a081016001600160401b0381118282101715620003dd57620003dd620002ec565b80604052508091508251620003f2816200037a565b8152602083015162000404816200037a565b6020820152604083015162000419816200037a565b604082015260608301516200042e816200037a565b6060820152608083015162000443816200037a565b6080919091015292915050565b600061012082840312156200046457600080fd5b6200046e62000302565b90506200047b8262000393565b81526200048b6020830162000393565b60208201526200049e6040830162000393565b6040820152620004b16060830162000393565b6060820152620004c46080830162000393565b6080820152620004d760a0830162000393565b60a0820152620004ea60c0830162000393565b60c0820152620004fd60e0830162000393565b60e08201526101006200051281840162000393565b9082015292915050565b80516001600160401b0381168114620003a057600080fd5b600082601f8301126200054657600080fd5b815160206001600160401b0380831115620005655762000565620002ec565b8260051b604051601f19603f830116810181811084821117156200058d576200058d620002ec565b604052938452858101830193838101925087851115620005ac57600080fd5b83870191505b84821015620005cd57815183529183019190830190620005b2565b979650505050505050565b80518015158114620003a057600080fd5b805160ff81168114620003a057600080fd5b6000606082840312156200060e57600080fd5b604051606081016001600160401b0381118282101715620006335762000633620002ec565b60405290508062000644836200051c565b815262000654602084016200051c565b602082015262000667604084016200051c565b60408201525092915050565b600061022082840312156200068757600080fd5b620006916200032e565b90506200069e826200051c565b8152620006ae602083016200051c565b6020820152620006c16040830162000393565b60408201526060828101519082015260808201516001600160401b03811115620006ea57600080fd5b620006f88482850162000534565b60808301525060a082015160a08201526200071660c0830162000393565b60c08201526200072960e08301620005d8565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101606200075f818401620005e9565b90820152610180620007738382016200051c565b908201526101a062000787838201620005d8565b908201526101c06200051284848301620005fb565b6000806000808486036102e0811215620007b557600080fd5b61010080821215620007c657600080fd5b620007d062000354565b91508651620007df816200037a565b8252620007ef6020880162000393565b6020830152620008026040880162000393565b6040830152620008156060880162000393565b6060830152620008286080880162000393565b60808301526200083b60a0880162000393565b60a08301526200084e60c0880162000393565b60c08301526200086160e0880162000393565b60e08301528195506200087788828901620003a5565b945050506200088b866101a0870162000450565b6102c08601519092506001600160401b03811115620008a957600080fd5b620008b78782880162000673565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015620008fd57835183529284019291840191600101620008df565b50909695505050505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a0516102c0516102e05161030051610320516103405161036051610380516103a0516103c0516103e05161040051610420516104405161046051610480516104a0516104c0516104e0516105005161052051610540516105605161058051615ea562000cd2600039600081816104060152610a3901526000818161032f0152610bd70152600081816105360152610c060152600081816104dd01526116f701526000818161082a01526122680152600081816107da015261212c015260008181610639015261206501526000818161080201528181612427015281816125dd015261269c0152600081816108f20152611efc01526000818161058601528181610c3501528181610fb3015281816113720152818161146a0152818161151e0152818161178e015281816117bd0152611b86015260008181610852015281816118fd01526119c701526000818161055e015261208e0152600081816104b5015281816123f70152818161260501526126c001526000818161050e015261215601526000818161039c01528181610a5a0152611f2501526000818161037401526122920152600081816106d90152610d6d01526000818161094201526124b301526000818161061101526124530152600081816108ca015261248301526000818161091a015281816123d001526127b001526000818161073a0152611c890152600081816109830152611df30152600081816107010152818161117901526111c601526000818161087a0152611d9b0152600081816106610152611c4e0152600081816109fb0152611b600152600081816104560152611b310152600081816106b10152610d4c0152600081816103c40152611b0101526000818161076201528181610b3b015261203c01526000818161042e01528181610b6a0152818161223f01526122f301526000818161078a01528181610b990152818161210301526121b70152600081816108a201528181610b0c015281816123af015281816127d3015281816128d5015281816129bb01528181612a630152612ca60152600081816109ab01528181610add01528181611ed30152611fbb015260008181610689015281816112fb01528181611629015261171f0152600081816107b201528181610da50152611c1f0152600081816105ae0152611dca0152600081816109d30152611d6901526000818161047e0152611d430152600081816105e90152611d1d0152615ea56000f3fe60806040523480156200001157600080fd5b5060043610620003245760003560e01c806391ddb28511620001b1578063d1da2c5c11620000f5578063eb657a4e11620000a3578063ee9a31a2116200007a578063ee9a31a214620009a5578063fa28742014620009cd578063faf5625f14620009f557600080fd5b8063eb657a4e146200093c578063ebe03a931462000964578063ec4f74ce146200097d57600080fd5b8063d49d518111620000d8578063d49d518114620008c4578063dae7cb8b14620008ec578063e8180c29146200091457600080fd5b8063d1da2c5c1462000874578063d384cb95146200089c57600080fd5b8063be41b367116200015f578063c519d1511162000136578063c519d15114620007fc578063c897f55e1462000824578063cc8089bb146200084c57600080fd5b8063be41b3671462000784578063bf5e3d5214620007ac578063c21c423314620007d457600080fd5b8063b38d57f01162000194578063b38d57f014620006fb578063b5e00c3f1462000734578063b7010697146200075c57600080fd5b806391ddb28514620006ab5780639f9854e514620006d357600080fd5b8063304b907111620002795780635d9e24441162000227578063817cd31211620001fe578063817cd312146200063357806385e1f4d0146200065b5780638765240f146200068357600080fd5b80635d9e244414620005a8578063609fb50314620005e3578063785ffb37146200060b57600080fd5b80634692de5d116200025c5780634692de5d14620005305780634b2f51ef14620005585780634e0e75fb146200058057600080fd5b8063304b907114620004ff5780633c2b7840146200050857600080fd5b80631b142ea711620002d75780631ccc2cd111620002ba5780631ccc2cd114620004785780632cfb7ca314620004af5780632db93bdc14620004d757600080fd5b80631b142ea714620004285780631c39b672146200045057600080fd5b80630a54257d116200030c5780630a54257d14620003965780631047fc5214620003be57806310a662e2146200040057600080fd5b8062f9731e14620003295780630787484b146200036e575b600080fd5b620003517f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003e67f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff909116815260200162000365565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620004a07f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200162000365565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620004a0600c81565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620005d07f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff909116815260200162000365565b620004a07f000000000000000000000000000000000000000000000000000000000000000081565b620003e67f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620004a07f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003e67f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620007237f000000000000000000000000000000000000000000000000000000000000000081565b604051901515815260200162000365565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620003e67f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620007237f000000000000000000000000000000000000000000000000000000000000000081565b620003e67f000000000000000000000000000000000000000000000000000000000000000081565b6200097b6200097536600462002faf565b62000a1d565b005b620003e67f000000000000000000000000000000000000000000000000000000000000000081565b620003517f000000000000000000000000000000000000000000000000000000000000000081565b620004a07f000000000000000000000000000000000000000000000000000000000000000081565b620004a07f000000000000000000000000000000000000000000000000000000000000000081565b62000a27620012f9565b600062000a3362001780565b905060007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060405162000a879062002d25565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f08015801562000aca573d6000803e3d6000fd5b50905060006040518061012001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001836001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bc45e0ae6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c92573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cb891906200305a565b6001600160a01b0316815250905060008360405160200162000cdb919062003384565b604051602081830303815290604052805190602001209050600062000d2d826040518060200162000d0c9062002d33565b6020820181038252601f19601f820116604052508051906020012062001e30565b905062000d3a8162001ebc565b836001600160a01b0316631a72d54c827f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008961014001518a61016001518b61018001518c602001517f00000000000000000000000000000000000000000000000000000000000000008e61020001518f61010001516040518b63ffffffff1660e01b815260040162000df79a9998979695949392919062003399565b600060405180830381600087803b15801562000e1257600080fd5b505af115801562000e27573d6000803e3d6000fd5b5050505060008260405162000e3c9062002d33565b8190604051809103906000f590508015801562000e5d573d6000803e3d6000fd5b509050816001600160a01b0316816001600160a01b03161462000ec75760405162461bcd60e51b815260206004820152601560248201527f554e455850435445445f524f4c4c55505f41444452000000000000000000000060448201526064015b60405180910390fd5b608086018051309091526040517fd384644b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063d384644b9062000f1a908a90899060040162003416565b600060405180830381600087803b15801562000f3557600080fd5b505af115801562000f4a573d6000803e3d6000fd5b50505050875160001462001177576000885167ffffffffffffffff81111562000f775762000f7762002ed2565b60405190808252806020026020018201604052801562000fa1578160200160208202803683370190505b50905060005b8951811015620010f7577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663facd743b8b838151811062000ff55762000ff5620034fc565b60200260200101516040518263ffffffff1660e01b81526004016200102991906001600160a01b0391909116815260200190565b602060405180830381865afa15801562001047573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200106d919062003528565b620010bb5760405162461bcd60e51b815260206004820152601860248201527f554e45585045435445445f4e45575f56414c494441544f520000000000000000604482015260640162000ebe565b6001828281518110620010d257620010d2620034fc565b9115156020928302919091019091015280620010ee816200355c565b91505062000fa7565b506040517fa3ffb7720000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063a3ffb7729062001141908c908590600401620035d2565b600060405180830381600087803b1580156200115c57600080fd5b505af115801562001171573d6000803e3d6000fd5b50505050505b7f00000000000000000000000000000000000000000000000000000000000000001562001235576040517fa2b4f1d80000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000151560048201526001600160a01b0383169063a2b4f1d890602401600060405180830381600087803b1580156200121b57600080fd5b505af115801562001230573d6000803e3d6000fd5b505050505b6040517f13af40350000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301528316906313af403590602401600060405180830381600087803b1580156200129257600080fd5b505af1158015620012a7573d6000803e3d6000fd5b5050604080516001600160a01b0380881682528a1660208201527f7e5cc5c3fce046d868d5918548df8d3e8ef9f09e6fb30a68081f1f1348cd0314935001905060405180910390a15050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200135557600080fd5b505af11580156200136a573d6000803e3d6000fd5b5050505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dff697876040518163ffffffff1660e01b8152600401602060405180830381865afa158015620013cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013f5919062003648565b905060328167ffffffffffffffff1611156200140f575060325b60005b8167ffffffffffffffff168167ffffffffffffffff161015620016c6576040517f6ddd374400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636ddd374490602401602060405180830381865afa158015620014ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014e091906200305a565b6040517fa23c44b10000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063a23c44b19060240160a060405180830381865afa15801562001566573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200158c919062003666565b905080608001518015620015ac5750606081015167ffffffffffffffff16155b15620016ae57604080516001808252818301909252600091602080830190803683370190505090508281600081518110620015eb57620015eb620034fc565b6001600160a01b0392831660209182029290920101526040517f7c75c2980000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000090911690637c75c2989062001662908490600401620036f9565b600060405180830381600087803b1580156200167d57600080fd5b505af115801562001692573d6000803e3d6000fd5b50505050600185620016a591906200370e565b945050620016be565b82620016ba8162003739565b9350505b505062001412565b506040517f0d40a0fd0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000001690630d40a0fd90602401600060405180830381600087803b1580156200176457600080fd5b505af115801562001779573d6000803e3d6000fd5b5050505050565b6200178a62002d41565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166392c8134c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166365f7f80d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001840919062003648565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff909116600482015260240161018060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018c5919062003763565b516040517f8eaa6ac00000000000000000000000000000000000000000000000000000000081526004810182905290915060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690638eaa6ac09060240160c060405180830381865afa1580156200194d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019739190620038b7565b915091506200198162002e4b565b82518152602080840151908201906002811115620019a357620019a36200316e565b90816002811115620019b957620019b96200316e565b905250836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166331644130620019f7846200236d565b856040518363ffffffff1660e01b815260040162001a1792919062003988565b602060405180830381865afa15801562001a35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a5b9190620039bf565b1462001aaa5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206c617465737420657865637574696f6e2068617368000000604482015260640162000ebe565b62001ad66040518060800160405280600081526020016000815260200160008152602001600081525090565b60408051606081018252600080825260208201819052918101919091526040518061026001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638ee1a1266040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c099190620039bf565b8152602001306001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020016040518060200160405280600081525081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b0ec2ae16040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001ce6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001d109190810190620039d9565b81526020018381526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020018481526020018581526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000060ff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16815260200182815250965050505050505090565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000905b90505b92915050565b60405163266a23b160e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081811660048401527f000000000000000000000000000000000000000000000000000000000000000082166024840152917f0000000000000000000000000000000000000000000000000000000000000000909116906399a88ec490604401600060405180830381600087803b15801562001f6c57600080fd5b505af115801562001f81573d6000803e3d6000fd5b50506040517f919cc7060000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301527f000000000000000000000000000000000000000000000000000000000000000016925063919cc7069150602401600060405180830381600087803b1580156200200257600080fd5b505af115801562002017573d6000803e3d6000fd5b5050505062002025620023ad565b60405163266a23b160e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081811660048401527f000000000000000000000000000000000000000000000000000000000000000082166024840152917f0000000000000000000000000000000000000000000000000000000000000000909116906399a88ec490604401600060405180830381600087803b158015620020d557600080fd5b505af1158015620020ea573d6000803e3d6000fd5b505060405163266a23b160e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081811660048401527f00000000000000000000000000000000000000000000000000000000000000008216602484015293507f00000000000000000000000000000000000000000000000000000000000000001691506399a88ec490604401600060405180830381600087803b1580156200219c57600080fd5b505af1158015620021b1573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636ae71f126040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200221157600080fd5b505af115801562002226573d6000803e3d6000fd5b505060405163266a23b160e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081811660048401527f00000000000000000000000000000000000000000000000000000000000000008216602484015293507f00000000000000000000000000000000000000000000000000000000000000001691506399a88ec490604401600060405180830381600087803b158015620022d857600080fd5b505af1158015620022ed573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636ae71f126040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200234d57600080fd5b505af115801562002362573d6000803e3d6000fd5b505050505050505050565b6200237762002e74565b60405180604001604052808360000151815260200183602001516002811115620023a557620023a56200316e565b905292915050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000015620025be577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639623609d827f000000000000000000000000000000000000000000000000000000000000000060405180606001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16815250604051602401620024f1919062003a68565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa655d93700000000000000000000000000000000000000000000000000000000179052517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152620025849392919060040162003a9a565b600060405180830381600087803b1580156200259f57600080fd5b505af1158015620025b4573d6000803e3d6000fd5b5050505062002664565b60405163266a23b160e21b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906399a88ec490604401600060405180830381600087803b1580156200264a57600080fd5b505af11580156200265f573d6000803e3d6000fd5b505050505b6040517f204e1c7a0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f00000000000000000000000000000000000000000000000000000000000000008116917f00000000000000000000000000000000000000000000000000000000000000009091169063204e1c7a90602401602060405180830381865afa1580156200270a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200273091906200305a565b6001600160a01b031614620027ae5760405162461bcd60e51b815260206004820152603160248201527f44656c61794275666665723a206e65772073657120696e626f7820696d706c6560448201527f6d656e746174696f6e206e6f7420736574000000000000000000000000000000606482015260840162000ebe565b7f000000000000000000000000000000000000000000000000000000000000000015157f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634b678a666040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002830573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002856919062003528565b151514620028cd5760405162461bcd60e51b815260206004820152602660248201527f44656c61794275666665723a20697344656c617942756666657261626c65206e60448201527f6f74207365740000000000000000000000000000000000000000000000000000606482015260840162000ebe565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa15801562002932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002958919062003ad1565b93509350935093506000600c8362002971919062003b1e565b15620029975762002984600c8462003b35565b6200299190600162003b4c565b620029a4565b620029a4600c8462003b35565b9050848111620029b55784620029b7565b805b94507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b31761f86040518060800160405280888152602001878152602001868152602001858152506040518263ffffffff1660e01b815260040162002a27919062003b62565b600060405180830381600087803b15801562002a4257600080fd5b505af115801562002a57573d6000803e3d6000fd5b505050506000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa15801562002ac0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ae6919062003ad1565b935093509350935088841462002b3f5760405162461bcd60e51b815260206004820181905260248201527f44656c61794275666665723a2064656c6179426c6f636b73206e6f7420736574604482015260640162000ebe565b86821462002bb65760405162461bcd60e51b815260206004820152602160248201527f44656c61794275666665723a2064656c61795365636f6e6473206e6f7420736560448201527f7400000000000000000000000000000000000000000000000000000000000000606482015260840162000ebe565b87831462002c2d5760405162461bcd60e51b815260206004820152602160248201527f44656c61794275666665723a20667574757265426c6f636b73206e6f7420736560448201527f7400000000000000000000000000000000000000000000000000000000000000606482015260840162000ebe565b85811462002ca45760405162461bcd60e51b815260206004820152602260248201527f44656c61794275666665723a206675747572655365636f6e6473206e6f74207360448201527f6574000000000000000000000000000000000000000000000000000000000000606482015260840162000ebe565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636ae71f126040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562002d0057600080fd5b505af115801562002d15573d6000803e3d6000fd5b5050505050505050505050505050565b610ed38062003b8f83390190565b61140e8062004a6283390190565b604051806102600160405280600067ffffffffffffffff16815260200160006001600160a01b03168152602001600081526020016000801916815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001606081526020016060815260200162002de06040518060800160405280600081526020016000815260200160008152602001600081525090565b815260200160008152602001600081526020016000815260200162002e0462002e4b565b81526000602080830182905260408084018390526060808501849052608085018490528151908101825283815291820183905281019190915260a09091015290565b905290565b604051806060016040528062002e6062002e95565b815260200160008152600060209091015290565b604051806040016040528062002e8962002e95565b81526020016000905290565b604051806040016040528062002eaa62002eb4565b815260200162002e465b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff8111828210171562002f0f5762002f0f62002ed2565b60405290565b6040805190810167ffffffffffffffff8111828210171562002f0f5762002f0f62002ed2565b604051601f8201601f1916810167ffffffffffffffff8111828210171562002f675762002f6762002ed2565b604052919050565b600067ffffffffffffffff82111562002f8c5762002f8c62002ed2565b5060051b60200190565b6001600160a01b038116811462002fac57600080fd5b50565b6000602080838503121562002fc357600080fd5b823567ffffffffffffffff81111562002fdb57600080fd5b8301601f8101851362002fed57600080fd5b80356200300462002ffe8262002f6f565b62002f3b565b81815260059190911b820183019083810190878311156200302457600080fd5b928401925b828410156200304f5783356200303f8162002f96565b8252928401929084019062003029565b979650505050505050565b6000602082840312156200306d57600080fd5b81516200307a8162002f96565b9392505050565b6000815180845260005b81811015620030a9576020818501810151868301820152016200308b565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015620030fb57815187529582019590820190600101620030dd565b509495945050505050565b80518260005b60028110156200312d5782518252602092830192909101906001016200310c565b5050506020808201516040840160005b60028110156200316657825167ffffffffffffffff16825291830191908301906001016200313d565b505050505050565b634e487b7160e01b600052602160045260246000fd5b60038110620031a357634e487b7160e01b600052602160045260246000fd5b9052565b620031b482825162003106565b6020810151620031c8608084018262003184565b506040015160a09190910152565b805167ffffffffffffffff16825260006103a060208301516200320460208601826001600160a01b03169052565b50604083015160408501526060830151606085015260808301516200323460808601826001600160a01b03169052565b5060a08301516200325060a08601826001600160a01b03169052565b5060c083015160c085015260e08301518160e0860152620032748286018262003081565b9150506101008084015185830382870152620032918382620030c9565b6101208681015180518983015260208101516101408a015260408101516101608a015260608101516101808a01529194509250905050506101408301516101a0818187015261016085015191506101c0828188015261018086015192506101e0838189015282870151935061020092506200330f83890185620031a7565b908601516102c08801528501516001600160a01b03166102e087015284015160ff166103008601525061022083015167ffffffffffffffff908116610320860152610240840151805182166103408701526020810151821661036087015260408101519091166103808601525b509392505050565b60208152600062001eb36020830184620031d6565b60006101406001600160a01b03808e16845267ffffffffffffffff8d166020850152808c1660408501528a60608501528960808501528860a085015280881660c085015280871660e08501525060ff8516610100840152806101208401526200340581840185620030c9565b9d9c50505050505050505050505050565b60006101408083526200342c81840186620031d6565b9150506001600160a01b03835116602083015260208301516200345a60408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516001600160a01b03811660808401525060808301516001600160a01b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160a01b03811660e08401525060e0830151610100620034e1818501836001600160a01b03169052565b8401516001600160a01b03811661012085015290506200337c565b634e487b7160e01b600052603260045260246000fd5b805180151581146200352357600080fd5b919050565b6000602082840312156200353b57600080fd5b62001eb38262003512565b634e487b7160e01b600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003590576200359062003546565b5060010190565b600081518084526020808501945080840160005b83811015620030fb5781516001600160a01b031687529582019590820190600101620035ab565b604081526000620035e7604083018562003597565b82810360208481019190915284518083528582019282019060005b818110156200362257845115158352938301939183019160010162003602565b5090979650505050505050565b805167ffffffffffffffff811681146200352357600080fd5b6000602082840312156200365b57600080fd5b62001eb3826200362f565b600060a082840312156200367957600080fd5b60405160a0810181811067ffffffffffffffff821117156200369f576200369f62002ed2565b60405282518152620036b4602084016200362f565b6020820152620036c7604084016200362f565b6040820152620036da606084016200362f565b6060820152620036ed6080840162003512565b60808201529392505050565b60208152600062001eb3602083018462003597565b67ffffffffffffffff82811682821603908082111562003732576200373262003546565b5092915050565b600067ffffffffffffffff80831681810362003759576200375962003546565b6001019392505050565b600061018082840312156200377757600080fd5b6200378162002ee8565b825181526020830151602082015260408301516040820152620037a7606084016200362f565b6060820152620037ba608084016200362f565b6080820152620037cd60a084016200362f565b60a0820152620037e060c084016200362f565b60c0820152620037f360e084016200362f565b60e0820152610100620038088185016200362f565b908201526101206200381c8482016200362f565b90820152610140620038308482016200362f565b90820152610160928301519281019290925250919050565b600082601f8301126200385a57600080fd5b6200386462002f15565b8060408401858111156200387757600080fd5b845b818110156200389c576200388d816200362f565b84526020938401930162003879565b509095945050505050565b8051600381106200352357600080fd5b60008082840360c0811215620038cc57600080fd5b60a0811215620038db57600080fd5b620038e562002f15565b6080821215620038f457600080fd5b620038fe62002f15565b915085601f8601126200391057600080fd5b6200391a62002f15565b8060408701888111156200392d57600080fd5b875b81811015620039495780518452602093840193016200392f565b5081855262003959898262003848565b60208601525050508181526200397260808601620038a7565b602082015260a094909401519395939450505050565b600060c0820190506200399d82855162003106565b6020840151620039b1608084018262003184565b508260a08301529392505050565b600060208284031215620039d257600080fd5b5051919050565b60006020808385031215620039ed57600080fd5b825167ffffffffffffffff81111562003a0557600080fd5b8301601f8101851362003a1757600080fd5b805162003a2862002ffe8262002f6f565b81815260059190911b8201830190838101908783111562003a4857600080fd5b928401925b828410156200304f5783518252928401929084019062003a4d565b6060810162001eb68284805167ffffffffffffffff908116835260208083015182169084015260409182015116910152565b60006001600160a01b0380861683528085166020840152506060604083015262003ac8606083018462003081565b95945050505050565b6000806000806080858703121562003ae857600080fd5b505082516020840151604085015160609095015191969095509092509050565b634e487b7160e01b600052601260045260246000fd5b60008262003b305762003b3062003b08565b500690565b60008262003b475762003b4762003b08565b500490565b8082018082111562001eb65762001eb662003546565b815181526020808301519082015260408083015190820152606080830151908201526080810162001eb656fe608060405260405162000ed338038062000ed3833981016040819052620000269162000487565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ba565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b6200023e1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000eac60279139620002f8565b9392505050565b60006200018060008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a81620003e160201b6200026a1760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620003de60201b620001fa1760201c565b60606001600160a01b0384163b620003625760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001f1565b600080856001600160a01b0316856040516200037f919062000567565b600060405180830381855af49150503d8060008114620003bc576040519150601f19603f3d011682016040523d82523d6000602084013e620003c1565b606091505b509092509050620003d4828286620003f0565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620004015750816200014f565b825115620004125782518084602001fd5b8160405162461bcd60e51b8152600401620001f1919062000585565b80516001600160a01b03811681146200044657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200047e57818101518382015260200162000464565b50506000910152565b6000806000606084860312156200049d57600080fd5b620004a8846200042e565b9250620004b8602085016200042e565b60408501519092506001600160401b0380821115620004d657600080fd5b818601915086601f830112620004eb57600080fd5b8151818111156200050057620005006200044b565b604051601f8201601f19908116603f011681019083821181831017156200052b576200052b6200044b565b816040528281528960208487010111156200054557600080fd5b6200055883602083016020880162000461565b80955050505050509250925092565b600082516200057b81846020870162000461565b9190910192915050565b6020815260008251806020840152620005a681604085016020870162000461565b601f01601f19169190910160400192915050565b6108c280620005ca6000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610736565b610128565b61006b6100a3366004610751565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610736565b6101fd565b34801561010557600080fd5b506100bd61021d565b610116610279565b610126610121610329565b610333565b565b610130610357565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061038a565b50565b61015a61010e565b61016d610357565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061038a915050565b505050565b6101bf61010e565b60006101d6610357565b6001600160a01b031633036101f2576101ed610329565b905090565b6101fa61010e565b90565b610205610357565b6001600160a01b0316330361015d5761015a816103b5565b6000610227610357565b6001600160a01b031633036101f2576101ed610357565b6060610263838360405180606001604052806027815260200161086660279139610409565b9392505050565b6001600160a01b03163b151590565b610281610357565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6104fd565b3660008037600080366000845af43d6000803e808015610352573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61039383610525565b6000825111806103a05750805b156101bf576103af838361023e565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103de610357565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610565565b60606001600160a01b0384163b6104885760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610320565b600080856001600160a01b0316856040516104a391906107f8565b600060405180830381855af49150503d80600081146104de576040519150601f19603f3d011682016040523d82523d6000602084013e6104e3565b606091505b50915091506104f382828661063d565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61037b565b61052e81610676565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105e15760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610320565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060831561064c575081610263565b82511561065c5782518084602001fd5b8160405162461bcd60e51b81526004016103209190610814565b6001600160a01b0381163b6106f35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610320565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610604565b80356001600160a01b038116811461073157600080fd5b919050565b60006020828403121561074857600080fd5b6102638261071a565b60008060006040848603121561076657600080fd5b61076f8461071a565b9250602084013567ffffffffffffffff8082111561078c57600080fd5b818601915086601f8301126107a057600080fd5b8135818111156107af57600080fd5b8760208285010111156107c157600080fd5b6020830194508093505050509250925092565b60005b838110156107ef5781810151838201526020016107d7565b50506000910152565b6000825161080a8184602087016107d4565b9190910192915050565b60208152600082518060208401526108338160408501602087016107d4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c1888b421836e473bfc3e72d153dc5c76569ce769e37cfa444506490e142daa564736f6c63430008110033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564608060405234801561001057600080fd5b506113ee806100206000396000f3fe6080604052600436106100225760003560e01c8063d384644b1461003957610031565b366100315761002f610059565b005b61002f610059565b34801561004557600080fd5b5061002f610054366004610d95565b61006b565b6100696100646101bd565b6102a1565b565b60006100756102ca565b6001600160a01b031614801561009b575060006100906102fd565b6001600160a01b0316145b80156100b7575060006100ac610325565b6001600160a01b0316145b156101b5576101b18160c0015183836040516024016100d792919061113d565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9e7e6aa70000000000000000000000000000000000000000000000000000000017905260e08601519087015191516001600160a01b0390921660248301529060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052608087015161034d565b5050565b6101b1610059565b600060043610156102155760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f46554e435f53494700000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000336102206102ca565b6001600160a01b03160361023b576102366102fd565b610243565b610243610325565b90506001600160a01b0381163b61029c5760405162461bcd60e51b815260206004820152601360248201527f5441524745545f4e4f545f434f4e545241435400000000000000000000000000604482015260640161020c565b919050565b3660008037600080366000845af43d6000803e8080156102c0573d6000f35b3d6000fd5b505050565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102ee565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6102ee565b61037860017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610461132b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103146103a6576103a661134c565b6103d160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61132b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc146103ff576103ff61134c565b61042a60017f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546e61132b565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d146104585761045861134c565b61046181610480565b61046d858560006104d7565b61047983836000610502565b5050505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104a96102ca565b604080516001600160a01b03928316815291841660208301520160405180910390a16104d48161050b565b50565b6104e0836105e3565b6000825111806104ed5750805b156102c5576104fc8383610623565b50505050565b6104e083610651565b6001600160a01b0381166105875760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161020c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6105ec81610691565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610648838360405180606001604052806027815260200161139260279139610735565b90505b92915050565b61065a8161082b565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b6001600160a01b0381163b61070e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161020c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105aa565b60606001600160a01b0384163b6107b45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161020c565b600080856001600160a01b0316856040516107cf9190611362565b600060405180830381855af49150503d806000811461080a576040519150601f19603f3d011682016040523d82523d6000602084013e61080f565b606091505b509150915061081f8282866108cf565b925050505b9392505050565b6001600160a01b0381163b6108a85760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e7472616374000000000000000000606482015260840161020c565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6105aa565b606083156108de575081610824565b8251156108ee5782518084602001fd5b8160405162461bcd60e51b815260040161020c919061137e565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561094157610941610908565b60405290565b6040805190810167ffffffffffffffff8111828210171561094157610941610908565b604051610120810167ffffffffffffffff8111828210171561094157610941610908565b604051610260810167ffffffffffffffff8111828210171561094157610941610908565b604051601f8201601f1916810167ffffffffffffffff811182821017156109db576109db610908565b604052919050565b803567ffffffffffffffff8116811461029c57600080fd5b80356001600160a01b038116811461029c57600080fd5b600082601f830112610a2357600080fd5b813567ffffffffffffffff811115610a3d57610a3d610908565b610a506020601f19601f840116016109b2565b818152846020838601011115610a6557600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610a9357600080fd5b8135602067ffffffffffffffff821115610aaf57610aaf610908565b8160051b610abe8282016109b2565b9283528481018201928281019087851115610ad857600080fd5b83870192505b84831015610af757823582529183019190830190610ade565b979650505050505050565b600060808284031215610b1457600080fd5b6040516080810181811067ffffffffffffffff82111715610b3757610b37610908565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b600082601f830112610b7957600080fd5b610b81610947565b806040840185811115610b9357600080fd5b845b81811015610bb457610ba6816109e3565b845260209384019301610b95565b509095945050505050565b80356003811061029c57600080fd5b600081830360c0811215610be157600080fd5b610be961091e565b91506080811215610bf957600080fd5b50610c02610947565b83601f840112610c1157600080fd5b610c19610947565b806040850186811115610c2b57600080fd5b855b81811015610c45578035845260209384019301610c2d565b50818452610c538782610b68565b60208501525050508152610c6960808301610bbf565b602082015260a0820135604082015292915050565b803560ff8116811461029c57600080fd5b600060608284031215610ca157600080fd5b610ca961091e565b9050610cb4826109e3565b8152610cc2602083016109e3565b6020820152610cd3604083016109e3565b604082015292915050565b60006101208284031215610cf157600080fd5b610cf961096a565b9050610d04826109fb565b8152610d12602083016109fb565b6020820152610d23604083016109fb565b6040820152610d34606083016109fb565b6060820152610d45608083016109fb565b6080820152610d5660a083016109fb565b60a0820152610d6760c083016109fb565b60c0820152610d7860e083016109fb565b60e0820152610100610d8b8184016109fb565b9082015292915050565b600080610140808486031215610daa57600080fd5b833567ffffffffffffffff80821115610dc257600080fd5b908501906103a08288031215610dd757600080fd5b610ddf61098e565b610de8836109e3565b8152610df6602084016109fb565b60208201526040830135604082015260608301356060820152610e1b608084016109fb565b6080820152610e2c60a084016109fb565b60a082015260c083013560c082015260e083013582811115610e4d57600080fd5b610e5989828601610a12565b60e0830152506101008084013583811115610e7357600080fd5b610e7f8a828701610a82565b8284015250506101209150610e9688838501610b02565b828201526101a0915081830135848201526101c09350838301356101608201526101e080840135610180830152610200610ed28a828701610bce565b848401526102c085013586840152610eed6102e086016109fb565b82840152610efe6103008601610c7e565b9083015250610f1061032084016109e3565b610220820152610f24886103408501610c8f565b61024082015280955050505050610f3e8460208501610cde565b90509250929050565b60005b83811015610f62578181015183820152602001610f4a565b50506000910152565b60008151808452610f83816020860160208601610f47565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015610fc757815187529582019590820190600101610fab565b509495945050505050565b60038110610ff057634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b600281101561101b578251825260209283019290910190600101610ffc565b505050602090810151906040840160005b600281101561105357835167ffffffffffffffff168252928201929082019060010161102c565b505082015190506110676080840182610fd2565b506040015160a09190910152565b6001600160a01b038082511683528060208301511660208401528060408301511660408401525060608101516110b660608401826001600160a01b03169052565b5060808101516110d160808401826001600160a01b03169052565b5060a08101516110ec60a08401826001600160a01b03169052565b5060c081015161110760c08401826001600160a01b03169052565b5060e081015161112260e08401826001600160a01b03169052565b50610100818101516001600160a01b038116848301526104fc565b600061014080835261115b818401865167ffffffffffffffff169052565b6020850151610160611177818601836001600160a01b03169052565b604087015191506101808281870152606088015192506101a08381880152608089015193506101c06111b3818901866001600160a01b03169052565b60a08a015194506101e06111d1818a01876001600160a01b03169052565b60c08b0151955061020086818b015260e08c015196506102206103a0818c01526111ff6104e08c0189610f6b565b97506101008d01516102407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08d8b0301818e015261123d8a83610f97565b99506101208f015191506112766102608e0183805182526020810151602083015260408101516040830152606081015160608301525050565b998e01516102e08d0152878e01516103008d0152868e01516103208d0152858e0151996112a76103408e018c610ff4565b948e01516104008d015250918c01516001600160a01b03166104208b01528b015160ff166104408a01528a015167ffffffffffffffff9081166104608a0152908a0151805182166104808a0152602081015182166104a08a015260408101519091166104c0890152945061131a92505050565b915061082490506020830184611075565b8181038181111561064b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b60008251611374818460208701610f47565b9190910192915050565b6020815260006106486020830184610f6b56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212200e28671cb63face36695a8336c251b0b5b2da4b5c045a4876b7b8ee5d825942c64736f6c63430008110033a2646970667358221220df469de1221f98addd69d367e7df9d0ef53d8703ee51d51f2597cfaecdd9d7b864736f6c63430008110033608060405234801561001057600080fd5b50610a0d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806331644130146100465780638eaa6ac01461006c578063945c94941461008d575b600080fd5b61005961005436600461041d565b6100a2565b6040519081526020015b60405180910390f35b61007f61007a366004610448565b610193565b604051610063929190610483565b6100a061009b36600461050a565b6102bf565b005b60006101526100b636859003850185610598565b8051805160209182015192820151805190830151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081870152602d810194909452604d8401959095527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d850152911b1660758201528251808203605d018152607d909101909252815191012090565b8261016360a0860160808701610667565b6040516020016101759392919061068b565b60405160208183030381529060405280519060200120905092915050565b61019b6103ab565b600082815260208190526040812080546101b4906106c9565b80601f01602080910402602001604051908101604052809291908181526020018280546101e0906106c9565b801561022d5780601f106102025761010080835404028352916020019161022d565b820191906000526020600020905b81548152906001019060200180831161021057829003601f168201915b50505050508060200190518101906102459190610766565b909250905060008190036102ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f48617368206e6f7420796574207365740000000000000000000000000000000060448201526064015b60405180910390fd5b915091565b6102c982826100a2565b8314610331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f496e76616c69642068617368000000000000000000000000000000000000000060448201526064016102b1565b818160405160200161034492919061088c565b60408051601f1981840301815291815260008581526020819052209061036a90826108f5565b507f14c0a6b8d81f5915dacfd85e41ae4798343ec29de408ac4c13360c7238ae0ad983838360405161039e939291906109b5565b60405180910390a1505050565b60405180604001604052806103be6103cb565b815260200160005b905290565b60405180604001604052806103de6103e7565b81526020016103c65b60405180604001604052806002906020820280368337509192915050565b600060a0828403121561041757600080fd5b50919050565b60008060c0838503121561043057600080fd5b61043a8484610405565b9460a0939093013593505050565b60006020828403121561045a57600080fd5b5035919050565b6003811061047f57634e487b7160e01b600052602160045260246000fd5b9052565b8251805160c0830191908360005b60028110156104b0578251825260209283019290910190600101610491565b505050602090810151906040840160005b60028110156104e857835167ffffffffffffffff16825292820192908201906001016104c1565b505085015190506104fc6080840182610461565b508260a08301529392505050565b600080600060e0848603121561051f57600080fd5b833592506105308560208601610405565b915060c084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561057957610579610540565b60405290565b67ffffffffffffffff8116811461059557600080fd5b50565b6000608082840312156105aa57600080fd5b6105b2610556565b83601f8401126105c157600080fd5b6105c9610556565b8060408501868111156105db57600080fd5b855b818110156105f55780358452602093840193016105dd565b5081845286605f87011261060857600080fd5b610610610556565b9250829150608086018781111561062657600080fd5b8082101561064b5781356106398161057f565b84526020938401939190910190610626565b50506020830152509392505050565b6003811061059557600080fd5b60006020828403121561067957600080fd5b81356106848161065a565b9392505050565b8381528260208201526000600383106106b457634e487b7160e01b600052602160045260246000fd5b5060f89190911b604082015260410192915050565b600181811c908216806106dd57607f821691505b60208210810361041757634e487b7160e01b600052602260045260246000fd5b600082601f83011261070e57600080fd5b610716610556565b80604084018581111561072857600080fd5b845b8181101561074b57805161073d8161057f565b84526020938401930161072a565b509095945050505050565b80516107618161065a565b919050565b60008082840360c081121561077a57600080fd5b60a081121561078857600080fd5b610790610556565b608082121561079e57600080fd5b6107a6610556565b915085601f8601126107b757600080fd5b6107bf610556565b8060408701888111156107d157600080fd5b875b818110156107eb5780518452602093840193016107d3565b508185526107f989826106fd565b602086015250505081815261081060808601610756565b602082015260a094909401519395939450505050565b6040818337604082016040820160005b600281101561086957813561084a8161057f565b67ffffffffffffffff1683526020928301929190910190600101610836565b505050608081013561087a8161065a565b6108876080840182610461565b505050565b60c0810161089a8285610826565b8260a08301529392505050565b601f82111561088757600081815260208120601f850160051c810160208610156108ce5750805b601f850160051c820191505b818110156108ed578281556001016108da565b505050505050565b815167ffffffffffffffff81111561090f5761090f610540565b6109238161091d84546106c9565b846108a7565b602080601f83116001811461095857600084156109405750858301515b600019600386901b1c1916600185901b1785556108ed565b600085815260208120601f198616915b8281101561098757888601518255948401946001909101908401610968565b50858210156109a55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b83815260e081016109c96020830185610826565b8260c083015294935050505056fea2646970667358221220a81f5137e89bc68cab9cf1e408a23485cf78c3379ec0e6a20a536ca3b822d30664736f6c6343000811003360a060405234801561001057600080fd5b50604051610be3380380610be383398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610b206100c3600039600081816101a5015281816101f6015281816102b601528181610333015281816104500152818161051b0152818161058a0152818161060e01526106a50152610b206000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063a23c44b111610076578063cb23bcb51161005b578063cb23bcb5146101a0578063dff69787146101c7578063facd743b146101cf57600080fd5b8063a23c44b11461012f578063bc45e0ae1461019857600080fd5b806365f7f80d146100a85780636ddd3744146100ce5780638ee1a126146100f957806392c8134c1461010f575b600080fd5b6100b06101f2565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6100e16100dc36600461072b565b61027b565b6040516001600160a01b0390911681526020016100c5565b61010161032f565b6040519081526020016100c5565b61012261011d36600461072b565b6103b3565b6040516100c5919061074f565b61014261013d366004610868565b6104bc565b6040516100c59190600060a08201905082518252602083015167ffffffffffffffff8082166020850152806040860151166040850152806060860151166060850152505060808301511515608083015292915050565b6100e1610586565b6100e17f000000000000000000000000000000000000000000000000000000000000000081565b6100b061060a565b6101e26101dd366004610868565b61066a565b60405190151581526020016100c5565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166365f7f80d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102769190610895565b905090565b6040517f6ddd374400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636ddd374490602401602060405180830381865afa158015610305573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032991906108b2565b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638ee1a1266040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027691906108cf565b6040805161018081018252600080825260208201819052818301819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082018190526101208201819052610140820181905261016082015290517f92c8134c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff831660048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906392c8134c9060240161018060405180830381865afa158015610498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610939565b6040805160a08101825260008082526020820181905281830181905260608201819052608082015290517fa23c44b10000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a23c44b19060240160a060405180830381865afa158015610562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610a1b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bc45e0ae6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027691906108b2565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dff697876040518163ffffffff1660e01b8152600401602060405180830381865afa158015610252573d6000803e3d6000fd5b6040517ffacd743b0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063facd743b90602401602060405180830381865afa1580156106ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610acf565b67ffffffffffffffff8116811461072857600080fd5b50565b60006020828403121561073d57600080fd5b813561074881610712565b9392505050565b600061018082019050825182526020830151602083015260408301516040830152606083015161078b606084018267ffffffffffffffff169052565b5060808301516107a7608084018267ffffffffffffffff169052565b5060a08301516107c360a084018267ffffffffffffffff169052565b5060c08301516107df60c084018267ffffffffffffffff169052565b5060e08301516107fb60e084018267ffffffffffffffff169052565b506101008381015167ffffffffffffffff81168483015250506101208381015167ffffffffffffffff81168483015250506101408381015167ffffffffffffffff811684830152505061016092830151919092015290565b6001600160a01b038116811461072857600080fd5b60006020828403121561087a57600080fd5b813561074881610853565b805161089081610712565b919050565b6000602082840312156108a757600080fd5b815161074881610712565b6000602082840312156108c457600080fd5b815161074881610853565b6000602082840312156108e157600080fd5b5051919050565b604051610180810167ffffffffffffffff81118282101715610933577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6000610180828403121561094c57600080fd5b6109546108e8565b82518152602083015160208201526040830151604082015261097860608401610885565b606082015261098960808401610885565b608082015261099a60a08401610885565b60a08201526109ab60c08401610885565b60c08201526109bc60e08401610885565b60e08201526101006109cf818501610885565b908201526101206109e1848201610885565b908201526101406109f3848201610885565b90820152610160928301519281019290925250919050565b8051801515811461089057600080fd5b600060a08284031215610a2d57600080fd5b60405160a0810181811067ffffffffffffffff82111715610a77577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052825181526020830151610a8c81610712565b60208201526040830151610a9f81610712565b60408201526060830151610ab281610712565b6060820152610ac360808401610a0b565b60808201529392505050565b600060208284031215610ae157600080fd5b61074882610a0b56fea2646970667358221220d72dce3d7707d59230e5be10a8daf3e7c32c837063e73f888f079a4cc0773bfc64736f6c63430008110033608060405234801561001057600080fd5b506040516102a03803806102a083398101604081905261002f916100bf565b8051610042906000906020840190610049565b505061017c565b828054828255906000526020600020908101928215610084579160200282015b82811115610084578251825591602001919060010190610069565b50610090929150610094565b5090565b5b808211156100905760008155600101610095565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156100d257600080fd5b82516001600160401b03808211156100e957600080fd5b818501915085601f8301126100fd57600080fd5b81518181111561010f5761010f6100a9565b8060051b604051601f19603f83011681018181108582111715610134576101346100a9565b60405291825284820192508381018501918883111561015257600080fd5b938501935b8285101561017057845184529385019392850192610157565b98975050505050505050565b6101158061018b6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063b0ec2ae114602d575b600080fd5b60336047565b604051603e9190609d565b60405180910390f35b60606000805480602002602001604051908101604052809291908181526020018280548015609357602002820191906000526020600020905b8154815260200190600101908083116080575b5050505050905090565b6020808252825182820181905260009190848201906040850190845b8181101560d35783518352928401929184019160010160b9565b5090969550505050505056fea264697066735822122089776e86d5082f8bc8bbebae557729c27d72d073b09ad415b360a8ed714f467564736f6c63430008110033", } // BOLDUpgradeActionABI is the input ABI used to generate the binding from. @@ -3660,7 +3660,7 @@ func (_BridgeCreator *BridgeCreatorFilterer) ParseTemplatesUpdated(log types.Log // ConstantArrayStorageMetaData contains all meta data concerning the ConstantArrayStorage contract. var ConstantArrayStorageMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"__array\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"array\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506040516102a03803806102a083398101604081905261002f916100bf565b8051610042906000906020840190610049565b505061017c565b828054828255906000526020600020908101928215610084579160200282015b82811115610084578251825591602001919060010190610069565b50610090929150610094565b5090565b5b808211156100905760008155600101610095565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156100d257600080fd5b82516001600160401b03808211156100e957600080fd5b818501915085601f8301126100fd57600080fd5b81518181111561010f5761010f6100a9565b8060051b604051601f19603f83011681018181108582111715610134576101346100a9565b60405291825284820192508381018501918883111561015257600080fd5b938501935b8285101561017057845184529385019392850192610157565b98975050505050505050565b6101158061018b6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063b0ec2ae114602d575b600080fd5b60336047565b604051603e9190609d565b60405180910390f35b60606000805480602002602001604051908101604052809291908181526020018280548015609357602002820191906000526020600020905b8154815260200190600101908083116080575b5050505050905090565b6020808252825182820181905260009190848201906040850190845b8181101560d35783518352928401929184019160010160b9565b5090969550505050505056fea2646970667358221220904c624921e9454d730f989768076aae699d24c1c5307e98935f9cb64c34f4c364736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b506040516102a03803806102a083398101604081905261002f916100bf565b8051610042906000906020840190610049565b505061017c565b828054828255906000526020600020908101928215610084579160200282015b82811115610084578251825591602001919060010190610069565b50610090929150610094565b5090565b5b808211156100905760008155600101610095565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156100d257600080fd5b82516001600160401b03808211156100e957600080fd5b818501915085601f8301126100fd57600080fd5b81518181111561010f5761010f6100a9565b8060051b604051601f19603f83011681018181108582111715610134576101346100a9565b60405291825284820192508381018501918883111561015257600080fd5b938501935b8285101561017057845184529385019392850192610157565b98975050505050505050565b6101158061018b6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063b0ec2ae114602d575b600080fd5b60336047565b604051603e9190609d565b60405180910390f35b60606000805480602002602001604051908101604052809291908181526020018280548015609357602002820191906000526020600020905b8154815260200190600101908083116080575b5050505050905090565b6020808252825182820181905260009190848201906040850190845b8181101560d35783518352928401929184019160010160b9565b5090969550505050505056fea264697066735822122089776e86d5082f8bc8bbebae557729c27d72d073b09ad415b360a8ed714f467564736f6c63430008110033", } // ConstantArrayStorageABI is the input ABI used to generate the binding from. @@ -13773,7 +13773,7 @@ func (_ISeqInboxPostUpgradeInit *ISeqInboxPostUpgradeInitTransactorSession) Post // RollupAdminLogicMetaData contains all meta data concerning the RollupAdminLogic contract. var RollupAdminLogicMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"anyTrustFastConfirmer\",\"type\":\"address\"}],\"name\":\"AnyTrustFastConfirmerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sendRoot\",\"type\":\"bytes32\"}],\"name\":\"AssertionConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"afterInboxBatchAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"}],\"name\":\"AssertionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"AssertionForceConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"AssertionForceCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBaseStake\",\"type\":\"uint256\"}],\"name\":\"BaseStakeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"}],\"name\":\"ChallengeManagerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"newConfirmPeriod\",\"type\":\"uint64\"}],\"name\":\"ConfirmPeriodBlocksSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"DelayedInboxSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"name\":\"InboxSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLoserStakerEscrow\",\"type\":\"address\"}],\"name\":\"LoserStakeEscrowSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"MinimumAssertionPeriodSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"OldOutboxRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"OutboxSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asserter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"challengedAssertion\",\"type\":\"uint64\"}],\"name\":\"RollupChallengeStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"machineHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"RollupInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerInbox\",\"type\":\"address\"}],\"name\":\"SequencerInboxSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"staker\",\"type\":\"address[]\"}],\"name\":\"StakersForceRefunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"UpgradedSecondary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"withdrawalAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserStakeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserWithdrawableFundsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"ValidatorAfkBlocksSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_validatorWhitelistDisabled\",\"type\":\"bool\"}],\"name\":\"ValidatorWhitelistDisabledSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"validators\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"bool[]\",\"name\":\"enabled\",\"type\":\"bool[]\"}],\"name\":\"ValidatorsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"newWasmModuleRoot\",\"type\":\"bytes32\"}],\"name\":\"WasmModuleRootSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_stakerMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"withdrawalAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"amountStaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"anyTrustFastConfirmer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeGracePeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeManager\",\"outputs\":[{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confirmPeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"confirmState\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"forceConfirmAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"forceCreateAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"staker\",\"type\":\"address[]\"}],\"name\":\"forceRefundStaker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisAssertionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertion\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"firstChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"secondChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAtBlock\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isFirstChild\",\"type\":\"bool\"},{\"internalType\":\"enumAssertionStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configHash\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionNode\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertionCreationBlockForLogLookup\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getFirstChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getSecondChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"getStaker\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"withdrawalAddress\",\"type\":\"address\"}],\"internalType\":\"structIRollupCore.Staker\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"stakerNum\",\"type\":\"uint64\"}],\"name\":\"getStakerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inbox\",\"outputs\":[{\"internalType\":\"contractIInboxBase\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"stakeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseStake\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"loserStakeEscrow\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"miniStakeValues\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"sequencerInboxMaxTimeVariation\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBlockEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBigStepEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroSmallStepEdgeHeight\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"genesisAssertionState\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"genesisInboxCount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"anyTrustFastConfirmer\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"numBigStepLevel\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"challengeGracePeriodBlocks\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"threshold\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"replenishRateInBasis\",\"type\":\"uint64\"}],\"internalType\":\"structBufferConfig\",\"name\":\"bufferConfig\",\"type\":\"tuple\"}],\"internalType\":\"structConfig\",\"name\":\"config\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"contractIInboxBase\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIOutbox\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollupAdminLogic\",\"type\":\"address\"},{\"internalType\":\"contractIRollupUser\",\"name\":\"rollupUserLogic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validatorWalletCreator\",\"type\":\"address\"}],\"internalType\":\"structContractDependencies\",\"name\":\"connectedContracts\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isFirstChild\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isPending\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"isStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfirmed\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"latestStakedAssertion\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loserStakeEscrow\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumAssertionPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outbox\",\"outputs\":[{\"internalType\":\"contractIOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_outbox\",\"type\":\"address\"}],\"name\":\"removeOldOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resume\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDeploymentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupEventInbox\",\"outputs\":[{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_anyTrustFastConfirmer\",\"type\":\"address\"}],\"name\":\"setAnyTrustFastConfirmer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newBaseStake\",\"type\":\"uint256\"}],\"name\":\"setBaseStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_challengeManager\",\"type\":\"address\"}],\"name\":\"setChallengeManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newConfirmPeriod\",\"type\":\"uint64\"}],\"name\":\"setConfirmPeriodBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIInboxBase\",\"name\":\"newInbox\",\"type\":\"address\"}],\"name\":\"setInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newLoserStakerEscrow\",\"type\":\"address\"}],\"name\":\"setLoserStakeEscrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"setMinimumAssertionPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOutbox\",\"name\":\"_outbox\",\"type\":\"address\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_validator\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"_val\",\"type\":\"bool[]\"}],\"name\":\"setValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newAfkBlocks\",\"type\":\"uint64\"}],\"name\":\"setValidatorAfkBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_validatorWhitelistDisabled\",\"type\":\"bool\"}],\"name\":\"setValidatorWhitelistDisabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newWasmModuleRoot\",\"type\":\"bytes32\"}],\"name\":\"setWasmModuleRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakerCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalWithdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeSecondaryTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeSecondaryToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"validateAssertionHash\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"name\":\"validateConfig\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorAfkBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWalletCreator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWhitelistDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wasmModuleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"withdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"withdrawalAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60c0604052620000196200003660201b6200305f1760201c565b15156080523060a0523480156200002f57600080fd5b5062000104565b60408051600481526024810182526020810180516001600160e01b03166302881c7960e11b179052905160009182918291606491620000769190620000d3565b600060405180830381855afa9150503d8060008114620000b3576040519150601f19603f3d011682016040523d82523d6000602084013e620000b8565b606091505b5091509150818015620000cc575080516020145b9250505090565b6000825160005b81811015620000f65760208186018101518583015201620000da565b506000920191825250919050565b60805160a051615e776200017e60003960008181610f970152818161101c015281816113120152818161139701528181611521015281816115a60152818161170c01528181611bee01528181611c7301528181611d690152611dee01526000818161116c01528181612943015261445b0152615e776000f3fe60806040526004361061044a5760003560e01c806376e7e23b11610243578063b7ab4db511610143578063e8bd4922116100bb578063f112cea31161008a578063fb0e722b1161006f578063fb0e722b14610e77578063fc8ffa0314610e97578063ff204f3b14610eb757600080fd5b8063f112cea314610e37578063facd743b14610e5757600080fd5b8063e8bd492214610d23578063ee35f32714610dcc578063ef40a67014610de1578063f065de3f14610e1757600080fd5b8063dff6978711610112578063e531d8c7116100f7578063e531d8c714610cbb578063e6b3082c14610cdb578063e78cea9214610d0357600080fd5b8063dff6978714610c86578063e51019a614610c9b57600080fd5b8063b7ab4db514610c04578063bc45e0ae14610c26578063ce11e6ab14610c46578063ce66d05c14610c6657600080fd5b80639846129a116101d6578063a23c44b1116101a5578063a3ffb7721161018a578063a3ffb77214610ba4578063aa38a6e714610bc4578063b7626e7314610be457600080fd5b8063a23c44b114610a71578063a2b4f1d814610b8457600080fd5b80639846129a14610a085780639a7b455614610a1b5780639a8a059214610a3b5780639e7e6aa714610a5157600080fd5b80638830288411610212578063883028841461098557806389384960146109b25780638ee1a126146109d2578063948d6588146109e857600080fd5b806376e7e23b146108f15780637c75c298146109075780638456cb591461092757806384728cd01461093c57600080fd5b80633be680ea1161034e57806355840a58116102e15780635c975abb116102b057806365f7f80d1161029557806365f7f80d146108a65780636ddd3744146108bb57806371ef232c146108db57600080fd5b80635c975abb1461084b5780636177fd181461086357600080fd5b806355840a58146107c6578063567ca41b146107eb57806356bbc9e61461080b5780635bf038331461082b57600080fd5b80634f61f8501161031d5780634f61f8501461075157806351ed6a301461077157806352d1902d1461079157806353b60c4a146107a657600080fd5b80633be680ea146106cf57806345e38b641461070857806347fb24c51461071e5780634f1ef2861461073e57600080fd5b806313af4035116103e15780632e7acfa6116103b05780633083622811610395578063308362281461067a578063353325e01461069a5780633659cfe6146106af57600080fd5b80632e7acfa6146106235780632f30cabd1461064457600080fd5b806313af40351461058657806313c56ca7146105a65780631b1689e9146105d45780632abdd230146105ea57600080fd5b80630d40a0fd1161041d5780630d40a0fd146104e35780630d561b3714610503578063117155851461052357806312ab3d3b1461055c57600080fd5b8063023a96fe1461044f578063046f7da21461048c57806304972af9146104a357806306ae5851146104c3575b600080fd5b34801561045b57600080fd5b5060695461046f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561049857600080fd5b506104a1610ed7565b005b3480156104af57600080fd5b506104a16104be366004615203565b610ee1565b3480156104cf57600080fd5b506104a16104de36600461523b565b610efb565b3480156104ef57600080fd5b506104a16104fe366004615269565b610f8d565b34801561050f57600080fd5b506104a161051e366004615269565b6110d6565b34801561052f57600080fd5b5061054361053e36600461523b565b611143565b60405167ffffffffffffffff9091168152602001610483565b34801561056857600080fd5b50607b546105769060ff1681565b6040519015158152602001610483565b34801561059257600080fd5b506104a16105a1366004615269565b61115f565b3480156105b257600080fd5b506105c66105c136600461523b565b611168565b604051908152602001610483565b3480156105e057600080fd5b506105c6607a5481565b3480156105f657600080fd5b506105c6610605366004615269565b6001600160a01b031660009081526077602052604090206001015490565b34801561062f57600080fd5b506066546105439067ffffffffffffffff1681565b34801561065057600080fd5b506105c661065f366004615269565b6001600160a01b031660009081526078602052604090205490565b34801561068657600080fd5b5061057661069536600461523b565b6112b0565b3480156106a657600080fd5b506105c66112cc565b3480156106bb57600080fd5b506104a16106ca366004615269565b611308565b3480156106db57600080fd5b506069546105439074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b34801561071457600080fd5b506105c660715481565b34801561072a57600080fd5b506104a1610739366004615294565b61144e565b6104a161074c36600461533d565b611517565b34801561075d57600080fd5b506104a161076c366004615269565b61164d565b34801561077d57600080fd5b5060705461046f906001600160a01b031681565b34801561079d57600080fd5b506105c66116ff565b3480156107b257600080fd5b506104a16107c1366004615269565b6117c4565b3480156107d257600080fd5b50607b5461046f9061010090046001600160a01b031681565b3480156107f757600080fd5b506104a1610806366004615269565b611812565b34801561081757600080fd5b5061054361082636600461523b565b611929565b34801561083757600080fd5b506104a16108463660046153fd565b61194c565b34801561085757600080fd5b5060335460ff16610576565b34801561086f57600080fd5b5061057661087e366004615269565b6001600160a01b0316600090815260776020526040902060020154600160401b900460ff1690565b3480156108b257600080fd5b506074546105c6565b3480156108c757600080fd5b5061046f6108d6366004615455565b611991565b3480156108e757600080fd5b506105c660795481565b3480156108fd57600080fd5b506105c660675481565b34801561091357600080fd5b506104a16109223660046154bc565b6119cb565b34801561093357600080fd5b506104a1611ad0565b34801561094857600080fd5b5061046f610957366004615269565b6001600160a01b03908116600090815260776020526040902060020154690100000000000000000090041690565b34801561099157600080fd5b506109a56109a036600461523b565b611ad8565b6040516104839190615532565b3480156109be57600080fd5b506104a16109cd36600461523b565b611b7a565b3480156109de57600080fd5b506105c660685481565b3480156109f457600080fd5b506104a1610a0336600461523b565b611baf565b6104a1610a1636600461533d565b611be4565b348015610a2757600080fd5b506104a1610a36366004615593565b611d1a565b348015610a4757600080fd5b506105c660655481565b348015610a5d57600080fd5b506104a1610a6c3660046155d7565b611d5f565b348015610a7d57600080fd5b50610b2d610a8c366004615269565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160a01b03908116600090815260776020908152604091829020825160a081018452815481526001820154928101929092526002015467ffffffffffffffff81169282019290925260ff600160401b830416151560608201526901000000000000000000909104909116608082015290565b6040516104839190600060a082019050825182526020830151602083015267ffffffffffffffff60408401511660408301526060830151151560608301526001600160a01b03608084015116608083015292915050565b348015610b9057600080fd5b506104a1610b9f36600461562b565b612a6b565b348015610bb057600080fd5b506104a1610bbf366004615648565b612aac565b348015610bd057600080fd5b50606d5461046f906001600160a01b031681565b348015610bf057600080fd5b506104a1610bff366004615269565b612c41565b348015610c1057600080fd5b50610c19612c8f565b60405161048391906156b4565b348015610c3257600080fd5b50606e5461046f906001600160a01b031681565b348015610c5257600080fd5b50606c5461046f906001600160a01b031681565b348015610c7257600080fd5b506104a1610c81366004615455565b612ca0565b348015610c9257600080fd5b50607654610543565b348015610ca757600080fd5b506104a1610cb6366004615701565b612d4a565b348015610cc757600080fd5b50610576610cd636600461523b565b612db7565b348015610ce757600080fd5b5060665461054390600160401b900467ffffffffffffffff1681565b348015610d0f57600080fd5b50606b5461046f906001600160a01b031681565b348015610d2f57600080fd5b50610d8c610d3e366004615269565b60776020526000908152604090208054600182015460029092015490919067ffffffffffffffff811690600160401b810460ff1690690100000000000000000090046001600160a01b031685565b60408051958652602086019490945267ffffffffffffffff9092169284019290925290151560608301526001600160a01b0316608082015260a001610483565b348015610dd857600080fd5b5061046f612de7565b348015610ded57600080fd5b506105c6610dfc366004615269565b6001600160a01b031660009081526077602052604090205490565b348015610e2357600080fd5b50606f5461046f906001600160a01b031681565b348015610e4357600080fd5b506104a1610e52366004615455565b612e6e565b348015610e6357600080fd5b50610576610e72366004615269565b612ede565b348015610e8357600080fd5b50606a5461046f906001600160a01b031681565b348015610ea357600080fd5b506104a1610eb2366004615269565b612eeb565b348015610ec357600080fd5b506104a1610ed2366004615269565b612f8f565b610edf613125565b565b610ef781610eee84613177565b600101546131d8565b5050565b6067548111610f515760405162461bcd60e51b815260206004820152601c60248201527f424153455f5354414b455f4d5553545f42455f494e435245415345440000000060448201526064015b60405180910390fd5b60678190556040518181527f54404e5f5326112dad416747228f2fcd704e702c56bf0673ce7e531108e07c1b906020015b60405180910390a150565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361101a5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661104c6132dd565b6001600160a01b0316146110b75760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b604080516000808252602082019092526110d391839190613310565b50565b607b80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b038416908102919091179091556040519081527fd3ab4cbe1b6f519eb43f09ded17a12e81b811e297063ada2d65dddef5b612c7c90602001610f82565b600061114e82613177565b5467ffffffffffffffff1692915050565b6110d3816134b0565b60007f0000000000000000000000000000000000000000000000000000000000000000156111f2576000828152607c6020526040902054806111ec5760405162461bcd60e51b815260206004820152600c60248201527f4e4f5f415353455254494f4e00000000000000000000000000000000000000006044820152606401610f48565b92915050565b60006111fd83613177565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b830481161515606083015292935061129392909184916080840191600160c81b900416600281111561126f5761126f6154fe565b6002811115611280576112806154fe565b8152602001600182015481525050613504565b54600160801b900467ffffffffffffffff1692915050565b919050565b60006112bb82613177565b54600160c01b900460ff1692915050565b60006112d6615100565b6040805160608101825282815260016020820152600091810182905290806112ff818481613569565b94505050505090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036113955760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113c76132dd565b6001600160a01b0316146114325760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b604080516000808252602082019092526110d391839190613582565b606b546040517f47fb24c50000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152909116906347fb24c590604401600060405180830381600087803b1580156114b657600080fd5b505af11580156114ca573d6000803e3d6000fd5b5050604080516001600160a01b038616815284151560208201527fce7e7eac3fe4e3d77ad155523b4ddb4446965e38cbc7c8a484bb82dc817637ef93500190505b60405180910390a15050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036115a45760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166115d66132dd565b6001600160a01b0316146116415760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b610ef782826001613582565b606b546040517f4f61f8500000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015290911690634f61f85090602401600060405180830381600087803b1580156116ad57600080fd5b505af11580156116c1573d6000803e3d6000fd5b50506040516001600160a01b03841681527f82740fc8dc15b355f3eb60cd600d43cd104e6906458cccd4cb51bcd1384c0c3492506020019050610f82565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461179f5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610f48565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f9cf43f86b7edba7593cadbd304522caa8a94db8ec03e204762b19c6955f2c34590602001610f82565b606c546001600160a01b03908116908216036118705760405162461bcd60e51b815260206004820152600a60248201527f4355525f4f5554424f58000000000000000000000000000000000000000000006044820152606401610f48565b606b546040517fcee3d7280000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600060248301529091169063cee3d72890604401600060405180830381600087803b1580156118d757600080fd5b505af11580156118eb573d6000803e3d6000fd5b50506040516001600160a01b03841681527ffe29ae11ccc2c860bf49dbf67ca96fa1db99cb935b0a7c02e3fad38ea80d6c2592506020019050610f82565b600061193482613177565b54600160401b900467ffffffffffffffff1692915050565b611954613722565b61196084848484613774565b60405184907f0ef6ac64bd6b0fa95ed37aa19a1b16613fb89e2269c92639a9d516a64fea493890600090a250505050565b600060768267ffffffffffffffff16815481106119b0576119b061573f565b6000918252602090912001546001600160a01b031692915050565b6119d3613722565b80611a205760405162461bcd60e51b815260206004820152600b60248201527f454d5054595f41525241590000000000000000000000000000000000000000006044820152606401610f48565b60005b81811015611a9e57611a5a838383818110611a4057611a4061573f565b9050602002016020810190611a559190615269565b613991565b611a8b838383818110611a6f57611a6f61573f565b9050602002016020810190611a849190615269565b6000613a95565b5080611a968161576b565b915050611a23565b507f53e7f63f13f0c1bf266cf49783f9c98757c2adbe729a1358bc92635b2b4d7352828260405161150b9291906157ce565b610edf613b96565b611ae0615125565b611ae982613177565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b909104166002811115611b5457611b546154fe565b6002811115611b6557611b656154fe565b81526020016001820154815250509050919050565b60688190556040518181527f7c4db9e8738aa15b72d17ae77a824047a59f8657e14b5a5a75cb6d08213a1db790602001610f82565b60718190556040518181527f238dc443e1da4236615831e66e5dd5ed97848f0eec72bcb57efa87438fca687390602001610f82565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611c715760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611ca36132dd565b6001600160a01b031614611d0e5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b610ef782826001613310565b611d22613722565b611d2d828483613bd3565b505060405181907fe5256bb4fdac498ff91fac1e162648b613c54eae8e784a5e73ca9ffcb0a08a6e90600090a2505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611dec5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611e1e6132dd565b6001600160a01b031614611e895760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b600054610100900460ff1615808015611ea95750600054600160ff909116105b80611ec35750303b158015611ec3575060005460ff166001145b611f355760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610f48565b6000805460ff191660011790558015611f58576000805461ff0019166101001790555b43607a55611f696020830183615269565b606b80546001600160a01b0319166001600160a01b0392909216919091179055611f966020830183615269565b6001600160a01b03166347fb24c5611fb46060850160408601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b15801561201457600080fd5b505af1158015612028573d6000803e3d6000fd5b5061203a925050506020830183615269565b6001600160a01b0316634f61f8506120586040850160208601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156120b157600080fd5b505af11580156120c5573d6000803e3d6000fd5b506120da925050506060830160408401615269565b606a80546001600160a01b0319166001600160a01b039290921691909117905561210a6080830160608401615269565b606c80546001600160a01b0319166001600160a01b03929092169190911790556121376020830183615269565b6001600160a01b031663cee3d7286121556080850160608601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b1580156121b557600080fd5b505af11580156121c9573d6000803e3d6000fd5b506121de9250505060a0830160808401615269565b606d80546001600160a01b0319166001600160a01b03928316179055606b541663ae60bd1361221360a0850160808601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561226f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229391906157e2565b6123bc576122a46020830183615269565b6001600160a01b03166347fb24c56122c260a0850160808601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b15801561232257600080fd5b505af1158015612336573d6000803e3d6000fd5b5061234b9250505060a0830160808401615269565b6001600160a01b031663cf8d56d660c085013561236b60e08701876157ff565b6040518463ffffffff1660e01b815260040161238993929190615864565b600060405180830381600087803b1580156123a357600080fd5b505af11580156123b7573d6000803e3d6000fd5b505050505b6123cc6040830160208401615269565b6001600160a01b0316637fa3a40e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242d919061589a565b6000036124e7576124446040830160208401615269565b6040517fe0bc972900000000000000000000000000000000000000000000000000000000815260006004820181905260c0602483015260c4820181905260016044830181905260648301829052608483019190915260a48201526001600160a01b03919091169063e0bc97299060e401600060405180830381600087803b1580156124ce57600080fd5b505af11580156124e2573d6000803e3d6000fd5b505050505b6124f961012083016101008401615269565b606e80546001600160a01b0319166001600160a01b039290921691909117905561252960c0830160a08401615269565b606980546001600160a01b0319166001600160a01b03929092169190911790556125566020840184615455565b6066805460c086013560655560408601356067556060860135606855604b60715567ffffffffffffffff929092166fffffffffffffffffffffffffffffffff19909216919091176a03138000000000000000001790556125be61034084016103208501615455565b6069805467ffffffffffffffff9290921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055600061262260c0850160a08601615269565b6001600160a01b0316036126785760405162461bcd60e51b815260206004820152601060248201527f494e56414c49445f455343524f575f30000000000000000000000000000000006044820152606401610f48565b61268860c0840160a08501615269565b606f80546001600160a01b0319166001600160a01b03929092169190911790556126b86040840160208501615269565b607080546001600160a01b0319166001600160a01b03929092169190911790556126ea61030084016102e08501615269565b607b80546001600160a01b0392909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055600080806127808161274b612746368a90038a016102008b016159d4565b6144fe565b604080516020808201949094528082019290925260608083018790528151808403909101815260809092019052805191012090565b90506000606b60009054906101000a90046001600160a01b03166001600160a01b03166284120c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fa919061589a565b9050866102c00135810361281657612813600182615a3b565b90505b60685460675460695460665460408051602080820196909652808201949094526bffffffffffffffffffffffff19606093841b16928401929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b811660748501529085901b16607c830152805160648184030181526084909201905280519101206000906128ad9060019061452e565b90506128b98184614566565b6128c161515c565b6128d4368a90038a016102008b016159d4565b60408083019190915260685460675460695460665493518a9489947f901c3aee23cf4478825462caaab375c606ab83516060388344f0650340753630946129399489948e948d9493926001600160a01b03169167ffffffffffffffff90911690615adc565b60405180910390a37f0000000000000000000000000000000000000000000000000000000000000000156129da5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ca919061589a565b6000858152607c60205260409020555b6040805160608b0135815260c08b013560208201527ffc1b83c11d99d08a938e0b82a0bd45f822f71ff5abf23f999c93c4533d752464910160405180910390a15050505050508015612a66576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b607b805460ff19168215159081179091556040519081527f016436ae56a1958a8efa3965e4839a8a90009e0a225fd19fe89b701c99f3e6e990602001610f82565b82612af95760405162461bcd60e51b815260206004820152600b60248201527f454d5054595f41525241590000000000000000000000000000000000000000006044820152606401610f48565b828114612b485760405162461bcd60e51b815260206004820152600c60248201527f57524f4e475f4c454e47544800000000000000000000000000000000000000006044820152606401610f48565b60005b83811015612bfd57828282818110612b6557612b6561573f565b9050602002016020810190612b7a919061562b565b15612bb757612bb1858583818110612b9457612b9461573f565b9050602002016020810190612ba99190615269565b607290614689565b50612beb565b612be9858583818110612bcc57612bcc61573f565b9050602002016020810190612be19190615269565b60729061469e565b505b80612bf58161576b565b915050612b4b565b507f0d9690f97165f35991ae60d2a97e04aff472c08729722a9236ff1bc8b9ba90c084848484604051612c339493929190615bbb565b60405180910390a150505050565b606980546001600160a01b0319166001600160a01b0383169081179091556040519081527fe86d63ef871123954e3c79261a2ad29d42552412045093f9e7f3ba09a459874290602001610f82565b6060612c9b60726146b3565b905090565b60008167ffffffffffffffff1611612cfa5760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f434f4e4649524d5f504552494f44000000000000000000006044820152606401610f48565b6066805467ffffffffffffffff191667ffffffffffffffff83169081179091556040519081527fa65727a75a71361b541984b5db16e2bd4a6a013f072fe8bb097eafd3844b769790602001610f82565b612d6382612d5d368690038601866159d4565b83613569565b8414612db15760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f415353455254494f4e5f48415348000000000000000000006044820152606401610f48565b50505050565b60006001612dc483613177565b54600160c81b900460ff166002811115612de057612de06154fe565b1492915050565b606b54604080517fee35f32700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ee35f3279160048083019260209291908290030181865afa158015612e4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9b9190615c19565b606680547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16600160401b67ffffffffffffffff8416908102919091179091556040519081527f43f7dc42145cd896e425c1ba47e44ad7fac3214c8993455b88ea382f68a5ed3390602001610f82565b60006111ec6072836146c0565b6001600160a01b038116612f415760405162461bcd60e51b815260206004820152601060248201527f494e56414c49445f455343524f575f30000000000000000000000000000000006044820152606401610f48565b606f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f0b0f78bec1daf434a03f0d26fd75936a5391ef694a7ce32a964a316f40b530dd90602001610f82565b606c80546001600160a01b0319166001600160a01b03838116918217909255606b546040517fcee3d7280000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063cee3d72890604401600060405180830381600087803b15801561300d57600080fd5b505af1158015613021573d6000803e3d6000fd5b50506040516001600160a01b03841681527f0bff4fc5e4cd8fc762bca2b6ff29e3b73a463474097b3f1e972ed2a167b534a792506020019050610f82565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f2000000000000000000000000000000000000000000000000000000001790529051600091829182916064916130cb9190615c5a565b600060405180830381855afa9150503d8060008114613106576040519150601f19603f3d011682016040523d82523d6000602084013e61310b565b606091505b509150915081801561311e575080516020145b9250505090565b61312d613722565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000816131c65760405162461bcd60e51b815260206004820152601b60248201527f415353455254494f4e5f49445f43414e4e4f545f42455f5a45524f00000000006044820152606401610f48565b50600090815260756020526040902090565b61328f823560208401356131f26060860160408701615269565b6132026080870160608801615455565b61321260a0880160808901615455565b60408051602080820197909752808201959095526bffffffffffffffffffffffff19606094851b16938501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b81166074860152911b16607c8301528051606481840301815260849092019052805191012090565b8114610ef75760405162461bcd60e51b815260206004820152601460248201527f434f4e4649475f484153485f4d49534d415443480000000000000000000000006044820152606401610f48565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b546001600160a01b0316919050565b7f49bd798cd84788856140a4cd5030756b4d08a9e4d55db725ec195f232d262a895460ff161561334357612a66836146e2565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561339d575060408051601f3d908101601f1916820190925261339a9181019061589a565b60015b61340f5760405162461bcd60e51b815260206004820152603860248201527f45524331393637557067726164653a206e6577207365636f6e6461727920696d60448201527f706c656d656e746174696f6e206973206e6f74205555505300000000000000006064820152608401610f48565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d81146134a45760405162461bcd60e51b815260206004820152603360248201527f45524331393637557067726164653a20756e737570706f72746564207365636f60448201527f6e646172792070726f786961626c6555554944000000000000000000000000006064820152608401610f48565b50612a668383836147a3565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6134d96147c8565b604080516001600160a01b03928316815291841660208301520160405180910390a16110d3816147f0565b60008160800151600281111561351c5761351c6154fe565b036110d35760405162461bcd60e51b815260206004820152601360248201527f415353455254494f4e5f4e4f545f4558495354000000000000000000000000006044820152606401610f48565b60006135788461274b856144fe565b90505b9392505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156135b557612a6683614893565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561360f575060408051601f3d908101601f1916820190925261360c9181019061589a565b60015b6136815760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608401610f48565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146137165760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152608401610f48565b50612a66838383614937565b60335460ff16610edf5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610f48565b600061377f85613177565b905060018154600160c81b900460ff1660028111156137a0576137a06154fe565b146137ed5760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f50454e44494e470000000000000000000000000000000000000000006044820152606401610f48565b61380684613800368690038601866159d4565b84613569565b85146138545760405162461bcd60e51b815260206004820152600c60248201527f434f4e4649524d5f4441544100000000000000000000000000000000000000006044820152606401610f48565b600061386d61386836869003860186615c76565b614940565b9050600061388861388336879003870187615c76565b614952565b606c546040517fa04cee6000000000000000000000000000000000000000000000000000000000815260048101839052602481018590529192506001600160a01b03169063a04cee6090604401600060405180830381600087803b1580156138ef57600080fd5b505af1158015613903573d6000803e3d6000fd5b50505060748890555082547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff167902000000000000000000000000000000000000000000000000001783556040805183815260208101839052815189927ffc42829b29c259a7370ab56c8f69fce23b5f351a9ce151da453281993ec0090c928290030190a250505050505050565b6001600160a01b038116600090815260776020526040902060020154600160401b900460ff16613a035760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f5354414b4544000000000000000000000000000000000000000000006044820152606401610f48565b6001600160a01b03811660009081526077602052604081206001015460745490919082149080613a3284613177565b5467ffffffffffffffff161190508180613a495750805b612db15760405162461bcd60e51b815260206004820152600c60248201527f5354414b455f41435449564500000000000000000000000000000000000000006044820152606401610f48565b6001600160a01b038083166000908152607760205260408120600281015481549293919269010000000000000000009091049091169080851115613b1b5760405162461bcd60e51b815260206004820152601060248201527f544f4f5f4c4954544c455f5354414b45000000000000000000000000000000006044820152606401610f48565b6000613b278683615c92565b8685559050613b36838261495e565b826001600160a01b0316876001600160a01b03167fd957cf2340073335d256f72a9ef89cf1a43c31143341a6a53575ef33e987beb88489604051613b84929190918252602082015260400190565b60405180910390a39695505050505050565b613b9e614a03565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861315a3390565b600080613be660408601610eee86613177565b6001613bfa61024087016102208801615ca5565b6002811115613c0b57613c0b6154fe565b1480613c3957506002613c2661024087016102208801615ca5565b6002811115613c3757613c376154fe565b145b613c855760405162461bcd60e51b815260206004820152601060248201527f4241445f41465445525f535441545553000000000000000000000000000000006044820152606401610f48565b83613ca78635613c9d36899003890160e08a016159d4565b6020890135613569565b14613cf45760405162461bcd60e51b815260206004820152601460248201527f494e56414c49445f4245464f52455f53544154450000000000000000000000006044820152606401610f48565b6001613d0861018087016101608801615ca5565b6002811115613d1957613d196154fe565b14613d665760405162461bcd60e51b815260206004820152600f60248201527f4241445f505245565f53544154555300000000000000000000000000000000006044820152606401610f48565b6000613d7185613177565b90506000806101a0880160e0890182613d8a8383614a56565b1215613dd85760405162461bcd60e51b815260206004820152600f60248201527f494e424f585f4241434b574152445300000000000000000000000000000000006044820152606401610f48565b6000613dfe613ded60e08d0160c08e01615455565b849067ffffffffffffffff16614b63565b90506000811315613e515760405162461bcd60e51b815260206004820152600d60248201527f494e424f585f544f4f5f464152000000000000000000000000000000000000006044820152606401610f48565b6002613e656102408d016102208e01615ca5565b6002811115613e7657613e766154fe565b14158015613e845750600081125b15613ee657600196506000613e998484614a56565b13613ee65760405162461bcd60e51b815260206004820152601360248201527f4f564552464c4f575f5354414e445354494c4c000000000000000000000000006044820152606401610f48565b606b54604080517e84120c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916284120c9160048083019260209291908290030181865afa158015613f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f6b919061589a565b90506000613f798583614b63565b1315613fc75760405162461bcd60e51b815260206004820152600e60248201527f494e424f585f504153545f454e440000000000000000000000000000000000006044820152606401610f48565b80613fd860e08e0160c08f01615455565b67ffffffffffffffff1611156140305760405162461bcd60e51b815260206004820152601360248201527f494e424f585f4e4f545f504f50554c41544544000000000000000000000000006044820152606401610f48565b600061404961404436879003870187615c76565b614beb565b67ffffffffffffffff16905081810361406e57614067826001615a3b565b9650614072565b8196505b806000036140c25760405162461bcd60e51b815260206004820152601160248201527f454d5054595f494e424f585f434f554e540000000000000000000000000000006044820152606401610f48565b606b546001600160a01b03166316bf55796140de600184615c92565b6040518263ffffffff1660e01b81526004016140fc91815260200190565b602060405180830381865afa158015614119573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061413d919061589a565b9550505050505061415d87896101a001803603810190612d5d91906159d4565b94508585148061416b575085155b6141b75760405162461bcd60e51b815260206004820152601960248201527f554e45585045435445445f415353455254494f4e5f48415348000000000000006044820152606401610f48565b60006141c286613177565b54600160c81b900460ff1660028111156141de576141de6154fe565b1461422b5760405162461bcd60e51b815260206004820152600e60248201527f415353455254494f4e5f5345454e0000000000000000000000000000000000006044820152606401610f48565b825460685460675460695460665460408051602080820196909652808201949094526bffffffffffffffffffffffff19606093841b16928401929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b811660748501529087901b16607c830152805160648184030181526084909201905280519101206000916142cf9167ffffffffffffffff909116159061452e565b90506142da84614bf9565b60008681526075602090815260409182902083518154928501519385015160608601511515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff928316600160801b02167fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff968316600160401b026fffffffffffffffffffffffffffffffff19909616929093169190911793909317939093169290921717808255608083015183929182907fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16600160c81b8360028111156143d3576143d36154fe565b021790555060a0820151816001015590505087867f901c3aee23cf4478825462caaab375c606ab83516060388344f06503407536308b8587606854606754606960009054906101000a90046001600160a01b0316606660009054906101000a900467ffffffffffffffff166040516144519796959493929190615d29565b60405180910390a37f0000000000000000000000000000000000000000000000000000000000000000156144f25760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156144be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144e2919061589a565b6000878152607c60205260409020555b50505050935093915050565b6000816040516020016145119190615dc3565b604051602081830303815290604052805190602001209050919050565b614536615125565b61453e615125565b67ffffffffffffffff4316604082015292151560608401525060a08201526001608082015290565b61456e614c7d565b6002608083018190525060008181526075602090815260409182902084518154928601519386015160608701511515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff928316600160801b02167fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff968316600160401b026fffffffffffffffffffffffffffffffff19909616929093169190911793909317939093169290921717808255608084015184929182907fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16600160c81b836002811115614671576146716154fe565b021790555060a0919091015160019091015560745550565b600061357b836001600160a01b038416614d02565b600061357b836001600160a01b038416614d51565b6060600061357b83614e3a565b6001600160a01b0381166000908152600183016020526040812054151561357b565b6001600160a01b0381163b61475f5760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e74726163740000000000000000006064820152608401610f48565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6147ac83614e96565b6000825111806147b95750805b15612a6657612db18383614ed6565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103613301565b6001600160a01b03811661486c5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610f48565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103614782565b6001600160a01b0381163b6149105760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610f48565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc614782565b6147ac83614efb565b8051600090815b602002015192915050565b80516000906001614947565b6001600160a01b038216600090815260786020526040812054906149828383615a3b565b6001600160a01b03851660009081526078602052604081208290556079805492935085929091906149b4908490615a3b565b909155505060408051838152602081018390526001600160a01b038616917fa740af14c56e4e04a617b1de1eb20de73270decbaaead14f142aabf3038e5ae2910160405180910390a250505050565b60335460ff1615610edf5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610f48565b600080614a6b61404436869003860186615c76565b90506000614a8161404436869003860186615c76565b90508067ffffffffffffffff168267ffffffffffffffff161015614aab57600019925050506111ec565b8067ffffffffffffffff168267ffffffffffffffff161115614ad2576001925050506111ec565b6000614aeb614ae636889003880188615c76565b614f3b565b90506000614b01614ae636889003880188615c76565b90508067ffffffffffffffff168267ffffffffffffffff161015614b2d576000199450505050506111ec565b8067ffffffffffffffff168267ffffffffffffffff161115614b565760019450505050506111ec565b60009450505050506111ec565b600080614b7861404436869003860186615c76565b9050828167ffffffffffffffff161015614b97576000199150506111ec565b828167ffffffffffffffff161115614bb35760019150506111ec565b6000614bc7614ae636879003870187615c76565b67ffffffffffffffff161115614be15760019150506111ec565b60009150506111ec565b602081015160009081614947565b805467ffffffffffffffff16600003614c2957805467ffffffffffffffff19164367ffffffffffffffff16179055565b8054600160401b900467ffffffffffffffff166000036110d35780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16600160401b4367ffffffffffffffff1602179055565b600054610100900460ff16614cfa5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f48565b610edf614f4a565b6000818152600183016020526040812054614d49575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556111ec565b5060006111ec565b60008181526001830160205260408120548015614be1576000614d75600183615c92565b8554909150600090614d8990600190615c92565b9050818114614dee576000866000018281548110614da957614da961573f565b9060005260206000200154905080876000018481548110614dcc57614dcc61573f565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614dff57614dff615dd1565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506111ec565b606081600001805480602002602001604051908101604052809291908181526020018280548015614e8a57602002820191906000526020600020905b815481526020019060010190808311614e76575b50505050509050919050565b614e9f816146e2565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b606061357b8383604051806060016040528060278152602001615e1b60279139614fd3565b614f0481614893565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60208101516000906001614947565b600054610100900460ff16614fc75760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f48565b6033805460ff19169055565b60606001600160a01b0384163b6150525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610f48565b600080856001600160a01b03168560405161506d9190615c5a565b600060405180830381855af49150503d80600081146150a8576040519150601f19603f3d011682016040523d82523d6000602084013e6150ad565b606091505b50915091506150bd8282866150c7565b9695505050505050565b606083156150d657508161357b565b8251156150e65782518084602001fd5b8160405162461bcd60e51b8152600401610f489190615de7565b60405180604001604052806151136151c6565b81526020016151206151c6565b905290565b6040805160c081018252600080825260208201819052918101829052606081018290529060808201905b8152600060209091015290565b60405180606001604052806151ac604080516060808201835260008083526020808401829052845160a0810186528281529081018290528085018290529182018190526080820152909182015290565b81526020016151b96151e4565b81526020016151206151e4565b60405180604001604052806002906020820280368337509192915050565b60405180606001604052806151f7615100565b8152602001600061514f565b60008082840360c081121561521757600080fd5b8335925060a0601f198201121561522d57600080fd5b506020830190509250929050565b60006020828403121561524d57600080fd5b5035919050565b6001600160a01b03811681146110d357600080fd5b60006020828403121561527b57600080fd5b813561357b81615254565b80151581146110d357600080fd5b600080604083850312156152a757600080fd5b82356152b281615254565b915060208301356152c281615286565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715615306576153066152cd565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715615335576153356152cd565b604052919050565b6000806040838503121561535057600080fd5b823561535b81615254565b915060208381013567ffffffffffffffff8082111561537957600080fd5b818601915086601f83011261538d57600080fd5b81358181111561539f5761539f6152cd565b6153b184601f19601f8401160161530c565b915080825287848285010111156153c757600080fd5b80848401858401376000848284010152508093505050509250929050565b600060c082840312156153f757600080fd5b50919050565b600080600080610120858703121561541457600080fd5b843593506020850135925061542c86604087016153e5565b939692955092936101000135925050565b803567ffffffffffffffff811681146112ab57600080fd5b60006020828403121561546757600080fd5b61357b8261543d565b60008083601f84011261548257600080fd5b50813567ffffffffffffffff81111561549a57600080fd5b6020830191508360208260051b85010111156154b557600080fd5b9250929050565b600080602083850312156154cf57600080fd5b823567ffffffffffffffff8111156154e657600080fd5b6154f285828601615470565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b600381106110d357634e487b7160e01b600052602160045260246000fd5b600060c08201905067ffffffffffffffff80845116835280602085015116602084015280604085015116604084015250606083015115156060830152608083015161557c81615514565b8060808401525060a083015160a083015292915050565b60008060008385036102a08112156155aa57600080fd5b84359350610260601f19820112156155c157600080fd5b5060208401915061028084013590509250925092565b6000808284036101408112156155ec57600080fd5b833567ffffffffffffffff81111561560357600080fd5b84016103a0818703121561561657600080fd5b9250610120601f198201121561522d57600080fd5b60006020828403121561563d57600080fd5b813561357b81615286565b6000806000806040858703121561565e57600080fd5b843567ffffffffffffffff8082111561567657600080fd5b61568288838901615470565b9096509450602087013591508082111561569b57600080fd5b506156a887828801615470565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156156f55783516001600160a01b0316835292840192918401916001016156d0565b50909695505050505050565b600080600080610120858703121561571857600080fd5b8435935061572986602087016153e5565b939693955050505060e082013591610100013590565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019820361577e5761577e615755565b5060010190565b8183526000602080850194508260005b858110156157c35781356157a881615254565b6001600160a01b031687529582019590820190600101615795565b509495945050505050565b602081526000613578602083018486615785565b6000602082840312156157f457600080fd5b815161357b81615286565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261583457600080fd5b83018035915067ffffffffffffffff82111561584f57600080fd5b6020019150368190038213156154b557600080fd5b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156158ac57600080fd5b5051919050565b600082601f8301126158c457600080fd5b6040516040810181811067ffffffffffffffff821117156158e7576158e76152cd565b80604052508060408401858111156158fe57600080fd5b845b8181101561591f576159118161543d565b835260209283019201615900565b509195945050505050565b60006080828403121561593c57600080fd5b6040516040810181811067ffffffffffffffff8211171561595f5761595f6152cd565b604052905080601f8301841361597457600080fd5b61597c6152e3565b80604085018681111561598e57600080fd5b855b818110156159a8578035845260209384019301615990565b508184526159b687826158b3565b60208501525050505092915050565b8035600381106112ab57600080fd5b600060c082840312156159e657600080fd5b6040516060810181811067ffffffffffffffff82111715615a0957615a096152cd565b604052615a16848461592a565b8152615a24608084016159c5565b602082015260a09290920135604083015250919050565b808201808211156111ec576111ec615755565b615a5781615514565b9052565b805180518360005b6002811015615a82578251825260209283019290910190600101615a63565b505050602090810151906040840160005b6002811015615aba57835167ffffffffffffffff1682529282019290820190600101615a93565b50508201519050615ace6080840182615a4e565b506040015160a09190910152565b600061032082019050885180518352602081015160208401526040810151905080516040840152602081015160608401526001600160a01b036040820151166080840152606081015167ffffffffffffffff80821660a08601528060808401511660c08601525050506020890151615b5760e0840182615a5b565b506040890151615b6b6101a0840182615a5b565b508761026083015286610280830152856102a0830152846102c0830152615b9e6102e08301856001600160a01b03169052565b67ffffffffffffffff831661030083015298975050505050505050565b604081526000615bcf604083018688615785565b8281036020848101919091528482528591810160005b86811015615c0c578335615bf881615286565b151582529282019290820190600101615be5565b5098975050505050505050565b600060208284031215615c2b57600080fd5b815161357b81615254565b60005b83811015615c51578181015183820152602001615c39565b50506000910152565b60008251615c6c818460208701615c36565b9190910192915050565b600060808284031215615c8857600080fd5b61357b838361592a565b818103818111156111ec576111ec615755565b600060208284031215615cb757600080fd5b61357b826159c5565b6040818337604082016040820160005b6002811015615d015767ffffffffffffffff615ceb8361543d565b1683526020928301929190910190600101615cd0565b505050615d10608082016159c5565b615d1981615514565b608083015260a090810135910152565b600061032082019050883582526020890135602083015260408901356040830152606089013560608301526080890135615d6281615254565b6001600160a01b03166080830152615d7c60a08a0161543d565b67ffffffffffffffff80821660a085015280615d9a60c08d0161543d565b1660c08501525050615db260e0830160e08b01615cc0565b6101a0615b6b818401828c01615cc0565b60c081016111ec8284615a5b565b634e487b7160e01b600052603160045260246000fd5b6020815260008251806020840152615e06816040850160208701615c36565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207bb9a4a8294eefa132630ecf7810754dc1b3e0d4dd07f9e17d55bb6c7afff28a64736f6c63430008110033", + Bin: "0x60c0604052620000196200003660201b6200305f1760201c565b15156080523060a0523480156200002f57600080fd5b5062000104565b60408051600481526024810182526020810180516001600160e01b03166302881c7960e11b179052905160009182918291606491620000769190620000d3565b600060405180830381855afa9150503d8060008114620000b3576040519150601f19603f3d011682016040523d82523d6000602084013e620000b8565b606091505b5091509150818015620000cc575080516020145b9250505090565b6000825160005b81811015620000f65760208186018101518583015201620000da565b506000920191825250919050565b60805160a051615e776200017e60003960008181610f970152818161101c015281816113120152818161139701528181611521015281816115a60152818161170c01528181611bee01528181611c7301528181611d690152611dee01526000818161116c01528181612943015261445b0152615e776000f3fe60806040526004361061044a5760003560e01c806376e7e23b11610243578063b7ab4db511610143578063e8bd4922116100bb578063f112cea31161008a578063fb0e722b1161006f578063fb0e722b14610e77578063fc8ffa0314610e97578063ff204f3b14610eb757600080fd5b8063f112cea314610e37578063facd743b14610e5757600080fd5b8063e8bd492214610d23578063ee35f32714610dcc578063ef40a67014610de1578063f065de3f14610e1757600080fd5b8063dff6978711610112578063e531d8c7116100f7578063e531d8c714610cbb578063e6b3082c14610cdb578063e78cea9214610d0357600080fd5b8063dff6978714610c86578063e51019a614610c9b57600080fd5b8063b7ab4db514610c04578063bc45e0ae14610c26578063ce11e6ab14610c46578063ce66d05c14610c6657600080fd5b80639846129a116101d6578063a23c44b1116101a5578063a3ffb7721161018a578063a3ffb77214610ba4578063aa38a6e714610bc4578063b7626e7314610be457600080fd5b8063a23c44b114610a71578063a2b4f1d814610b8457600080fd5b80639846129a14610a085780639a7b455614610a1b5780639a8a059214610a3b5780639e7e6aa714610a5157600080fd5b80638830288411610212578063883028841461098557806389384960146109b25780638ee1a126146109d2578063948d6588146109e857600080fd5b806376e7e23b146108f15780637c75c298146109075780638456cb591461092757806384728cd01461093c57600080fd5b80633be680ea1161034e57806355840a58116102e15780635c975abb116102b057806365f7f80d1161029557806365f7f80d146108a65780636ddd3744146108bb57806371ef232c146108db57600080fd5b80635c975abb1461084b5780636177fd181461086357600080fd5b806355840a58146107c6578063567ca41b146107eb57806356bbc9e61461080b5780635bf038331461082b57600080fd5b80634f61f8501161031d5780634f61f8501461075157806351ed6a301461077157806352d1902d1461079157806353b60c4a146107a657600080fd5b80633be680ea146106cf57806345e38b641461070857806347fb24c51461071e5780634f1ef2861461073e57600080fd5b806313af4035116103e15780632e7acfa6116103b05780633083622811610395578063308362281461067a578063353325e01461069a5780633659cfe6146106af57600080fd5b80632e7acfa6146106235780632f30cabd1461064457600080fd5b806313af40351461058657806313c56ca7146105a65780631b1689e9146105d45780632abdd230146105ea57600080fd5b80630d40a0fd1161041d5780630d40a0fd146104e35780630d561b3714610503578063117155851461052357806312ab3d3b1461055c57600080fd5b8063023a96fe1461044f578063046f7da21461048c57806304972af9146104a357806306ae5851146104c3575b600080fd5b34801561045b57600080fd5b5060695461046f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561049857600080fd5b506104a1610ed7565b005b3480156104af57600080fd5b506104a16104be366004615203565b610ee1565b3480156104cf57600080fd5b506104a16104de36600461523b565b610efb565b3480156104ef57600080fd5b506104a16104fe366004615269565b610f8d565b34801561050f57600080fd5b506104a161051e366004615269565b6110d6565b34801561052f57600080fd5b5061054361053e36600461523b565b611143565b60405167ffffffffffffffff9091168152602001610483565b34801561056857600080fd5b50607b546105769060ff1681565b6040519015158152602001610483565b34801561059257600080fd5b506104a16105a1366004615269565b61115f565b3480156105b257600080fd5b506105c66105c136600461523b565b611168565b604051908152602001610483565b3480156105e057600080fd5b506105c6607a5481565b3480156105f657600080fd5b506105c6610605366004615269565b6001600160a01b031660009081526077602052604090206001015490565b34801561062f57600080fd5b506066546105439067ffffffffffffffff1681565b34801561065057600080fd5b506105c661065f366004615269565b6001600160a01b031660009081526078602052604090205490565b34801561068657600080fd5b5061057661069536600461523b565b6112b0565b3480156106a657600080fd5b506105c66112cc565b3480156106bb57600080fd5b506104a16106ca366004615269565b611308565b3480156106db57600080fd5b506069546105439074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b34801561071457600080fd5b506105c660715481565b34801561072a57600080fd5b506104a1610739366004615294565b61144e565b6104a161074c36600461533d565b611517565b34801561075d57600080fd5b506104a161076c366004615269565b61164d565b34801561077d57600080fd5b5060705461046f906001600160a01b031681565b34801561079d57600080fd5b506105c66116ff565b3480156107b257600080fd5b506104a16107c1366004615269565b6117c4565b3480156107d257600080fd5b50607b5461046f9061010090046001600160a01b031681565b3480156107f757600080fd5b506104a1610806366004615269565b611812565b34801561081757600080fd5b5061054361082636600461523b565b611929565b34801561083757600080fd5b506104a16108463660046153fd565b61194c565b34801561085757600080fd5b5060335460ff16610576565b34801561086f57600080fd5b5061057661087e366004615269565b6001600160a01b0316600090815260776020526040902060020154600160401b900460ff1690565b3480156108b257600080fd5b506074546105c6565b3480156108c757600080fd5b5061046f6108d6366004615455565b611991565b3480156108e757600080fd5b506105c660795481565b3480156108fd57600080fd5b506105c660675481565b34801561091357600080fd5b506104a16109223660046154bc565b6119cb565b34801561093357600080fd5b506104a1611ad0565b34801561094857600080fd5b5061046f610957366004615269565b6001600160a01b03908116600090815260776020526040902060020154690100000000000000000090041690565b34801561099157600080fd5b506109a56109a036600461523b565b611ad8565b6040516104839190615532565b3480156109be57600080fd5b506104a16109cd36600461523b565b611b7a565b3480156109de57600080fd5b506105c660685481565b3480156109f457600080fd5b506104a1610a0336600461523b565b611baf565b6104a1610a1636600461533d565b611be4565b348015610a2757600080fd5b506104a1610a36366004615593565b611d1a565b348015610a4757600080fd5b506105c660655481565b348015610a5d57600080fd5b506104a1610a6c3660046155d7565b611d5f565b348015610a7d57600080fd5b50610b2d610a8c366004615269565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160a01b03908116600090815260776020908152604091829020825160a081018452815481526001820154928101929092526002015467ffffffffffffffff81169282019290925260ff600160401b830416151560608201526901000000000000000000909104909116608082015290565b6040516104839190600060a082019050825182526020830151602083015267ffffffffffffffff60408401511660408301526060830151151560608301526001600160a01b03608084015116608083015292915050565b348015610b9057600080fd5b506104a1610b9f36600461562b565b612a6b565b348015610bb057600080fd5b506104a1610bbf366004615648565b612aac565b348015610bd057600080fd5b50606d5461046f906001600160a01b031681565b348015610bf057600080fd5b506104a1610bff366004615269565b612c41565b348015610c1057600080fd5b50610c19612c8f565b60405161048391906156b4565b348015610c3257600080fd5b50606e5461046f906001600160a01b031681565b348015610c5257600080fd5b50606c5461046f906001600160a01b031681565b348015610c7257600080fd5b506104a1610c81366004615455565b612ca0565b348015610c9257600080fd5b50607654610543565b348015610ca757600080fd5b506104a1610cb6366004615701565b612d4a565b348015610cc757600080fd5b50610576610cd636600461523b565b612db7565b348015610ce757600080fd5b5060665461054390600160401b900467ffffffffffffffff1681565b348015610d0f57600080fd5b50606b5461046f906001600160a01b031681565b348015610d2f57600080fd5b50610d8c610d3e366004615269565b60776020526000908152604090208054600182015460029092015490919067ffffffffffffffff811690600160401b810460ff1690690100000000000000000090046001600160a01b031685565b60408051958652602086019490945267ffffffffffffffff9092169284019290925290151560608301526001600160a01b0316608082015260a001610483565b348015610dd857600080fd5b5061046f612de7565b348015610ded57600080fd5b506105c6610dfc366004615269565b6001600160a01b031660009081526077602052604090205490565b348015610e2357600080fd5b50606f5461046f906001600160a01b031681565b348015610e4357600080fd5b506104a1610e52366004615455565b612e6e565b348015610e6357600080fd5b50610576610e72366004615269565b612ede565b348015610e8357600080fd5b50606a5461046f906001600160a01b031681565b348015610ea357600080fd5b506104a1610eb2366004615269565b612eeb565b348015610ec357600080fd5b506104a1610ed2366004615269565b612f8f565b610edf613125565b565b610ef781610eee84613177565b600101546131d8565b5050565b6067548111610f515760405162461bcd60e51b815260206004820152601c60248201527f424153455f5354414b455f4d5553545f42455f494e435245415345440000000060448201526064015b60405180910390fd5b60678190556040518181527f54404e5f5326112dad416747228f2fcd704e702c56bf0673ce7e531108e07c1b906020015b60405180910390a150565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361101a5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661104c6132dd565b6001600160a01b0316146110b75760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b604080516000808252602082019092526110d391839190613310565b50565b607b80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b038416908102919091179091556040519081527fd3ab4cbe1b6f519eb43f09ded17a12e81b811e297063ada2d65dddef5b612c7c90602001610f82565b600061114e82613177565b5467ffffffffffffffff1692915050565b6110d3816134b0565b60007f0000000000000000000000000000000000000000000000000000000000000000156111f2576000828152607c6020526040902054806111ec5760405162461bcd60e51b815260206004820152600c60248201527f4e4f5f415353455254494f4e00000000000000000000000000000000000000006044820152606401610f48565b92915050565b60006111fd83613177565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b830481161515606083015292935061129392909184916080840191600160c81b900416600281111561126f5761126f6154fe565b6002811115611280576112806154fe565b8152602001600182015481525050613504565b54600160801b900467ffffffffffffffff1692915050565b919050565b60006112bb82613177565b54600160c01b900460ff1692915050565b60006112d6615100565b6040805160608101825282815260016020820152600091810182905290806112ff818481613569565b94505050505090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036113955760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113c76132dd565b6001600160a01b0316146114325760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b604080516000808252602082019092526110d391839190613582565b606b546040517f47fb24c50000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152909116906347fb24c590604401600060405180830381600087803b1580156114b657600080fd5b505af11580156114ca573d6000803e3d6000fd5b5050604080516001600160a01b038616815284151560208201527fce7e7eac3fe4e3d77ad155523b4ddb4446965e38cbc7c8a484bb82dc817637ef93500190505b60405180910390a15050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036115a45760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166115d66132dd565b6001600160a01b0316146116415760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b610ef782826001613582565b606b546040517f4f61f8500000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015290911690634f61f85090602401600060405180830381600087803b1580156116ad57600080fd5b505af11580156116c1573d6000803e3d6000fd5b50506040516001600160a01b03841681527f82740fc8dc15b355f3eb60cd600d43cd104e6906458cccd4cb51bcd1384c0c3492506020019050610f82565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461179f5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610f48565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f9cf43f86b7edba7593cadbd304522caa8a94db8ec03e204762b19c6955f2c34590602001610f82565b606c546001600160a01b03908116908216036118705760405162461bcd60e51b815260206004820152600a60248201527f4355525f4f5554424f58000000000000000000000000000000000000000000006044820152606401610f48565b606b546040517fcee3d7280000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600060248301529091169063cee3d72890604401600060405180830381600087803b1580156118d757600080fd5b505af11580156118eb573d6000803e3d6000fd5b50506040516001600160a01b03841681527ffe29ae11ccc2c860bf49dbf67ca96fa1db99cb935b0a7c02e3fad38ea80d6c2592506020019050610f82565b600061193482613177565b54600160401b900467ffffffffffffffff1692915050565b611954613722565b61196084848484613774565b60405184907f0ef6ac64bd6b0fa95ed37aa19a1b16613fb89e2269c92639a9d516a64fea493890600090a250505050565b600060768267ffffffffffffffff16815481106119b0576119b061573f565b6000918252602090912001546001600160a01b031692915050565b6119d3613722565b80611a205760405162461bcd60e51b815260206004820152600b60248201527f454d5054595f41525241590000000000000000000000000000000000000000006044820152606401610f48565b60005b81811015611a9e57611a5a838383818110611a4057611a4061573f565b9050602002016020810190611a559190615269565b613991565b611a8b838383818110611a6f57611a6f61573f565b9050602002016020810190611a849190615269565b6000613a95565b5080611a968161576b565b915050611a23565b507f53e7f63f13f0c1bf266cf49783f9c98757c2adbe729a1358bc92635b2b4d7352828260405161150b9291906157ce565b610edf613b96565b611ae0615125565b611ae982613177565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b909104166002811115611b5457611b546154fe565b6002811115611b6557611b656154fe565b81526020016001820154815250509050919050565b60688190556040518181527f7c4db9e8738aa15b72d17ae77a824047a59f8657e14b5a5a75cb6d08213a1db790602001610f82565b60718190556040518181527f238dc443e1da4236615831e66e5dd5ed97848f0eec72bcb57efa87438fca687390602001610f82565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611c715760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611ca36132dd565b6001600160a01b031614611d0e5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b610ef782826001613310565b611d22613722565b611d2d828483613bd3565b505060405181907fe5256bb4fdac498ff91fac1e162648b613c54eae8e784a5e73ca9ffcb0a08a6e90600090a2505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611dec5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611e1e6132dd565b6001600160a01b031614611e895760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b600054610100900460ff1615808015611ea95750600054600160ff909116105b80611ec35750303b158015611ec3575060005460ff166001145b611f355760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610f48565b6000805460ff191660011790558015611f58576000805461ff0019166101001790555b43607a55611f696020830183615269565b606b80546001600160a01b0319166001600160a01b0392909216919091179055611f966020830183615269565b6001600160a01b03166347fb24c5611fb46060850160408601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b15801561201457600080fd5b505af1158015612028573d6000803e3d6000fd5b5061203a925050506020830183615269565b6001600160a01b0316634f61f8506120586040850160208601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156120b157600080fd5b505af11580156120c5573d6000803e3d6000fd5b506120da925050506060830160408401615269565b606a80546001600160a01b0319166001600160a01b039290921691909117905561210a6080830160608401615269565b606c80546001600160a01b0319166001600160a01b03929092169190911790556121376020830183615269565b6001600160a01b031663cee3d7286121556080850160608601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b1580156121b557600080fd5b505af11580156121c9573d6000803e3d6000fd5b506121de9250505060a0830160808401615269565b606d80546001600160a01b0319166001600160a01b03928316179055606b541663ae60bd1361221360a0850160808601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561226f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229391906157e2565b6123bc576122a46020830183615269565b6001600160a01b03166347fb24c56122c260a0850160808601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b15801561232257600080fd5b505af1158015612336573d6000803e3d6000fd5b5061234b9250505060a0830160808401615269565b6001600160a01b031663cf8d56d660c085013561236b60e08701876157ff565b6040518463ffffffff1660e01b815260040161238993929190615864565b600060405180830381600087803b1580156123a357600080fd5b505af11580156123b7573d6000803e3d6000fd5b505050505b6123cc6040830160208401615269565b6001600160a01b0316637fa3a40e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242d919061589a565b6000036124e7576124446040830160208401615269565b6040517fe0bc972900000000000000000000000000000000000000000000000000000000815260006004820181905260c0602483015260c4820181905260016044830181905260648301829052608483019190915260a48201526001600160a01b03919091169063e0bc97299060e401600060405180830381600087803b1580156124ce57600080fd5b505af11580156124e2573d6000803e3d6000fd5b505050505b6124f961012083016101008401615269565b606e80546001600160a01b0319166001600160a01b039290921691909117905561252960c0830160a08401615269565b606980546001600160a01b0319166001600160a01b03929092169190911790556125566020840184615455565b6066805460c086013560655560408601356067556060860135606855604b60715567ffffffffffffffff929092166fffffffffffffffffffffffffffffffff19909216919091176a03138000000000000000001790556125be61034084016103208501615455565b6069805467ffffffffffffffff9290921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055600061262260c0850160a08601615269565b6001600160a01b0316036126785760405162461bcd60e51b815260206004820152601060248201527f494e56414c49445f455343524f575f30000000000000000000000000000000006044820152606401610f48565b61268860c0840160a08501615269565b606f80546001600160a01b0319166001600160a01b03929092169190911790556126b86040840160208501615269565b607080546001600160a01b0319166001600160a01b03929092169190911790556126ea61030084016102e08501615269565b607b80546001600160a01b0392909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055600080806127808161274b612746368a90038a016102008b016159d4565b6144fe565b604080516020808201949094528082019290925260608083018790528151808403909101815260809092019052805191012090565b90506000606b60009054906101000a90046001600160a01b03166001600160a01b03166284120c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fa919061589a565b9050866102c00135810361281657612813600182615a3b565b90505b60685460675460695460665460408051602080820196909652808201949094526bffffffffffffffffffffffff19606093841b16928401929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b811660748501529085901b16607c830152805160648184030181526084909201905280519101206000906128ad9060019061452e565b90506128b98184614566565b6128c161515c565b6128d4368a90038a016102008b016159d4565b60408083019190915260685460675460695460665493518a9489947f901c3aee23cf4478825462caaab375c606ab83516060388344f0650340753630946129399489948e948d9493926001600160a01b03169167ffffffffffffffff90911690615adc565b60405180910390a37f0000000000000000000000000000000000000000000000000000000000000000156129da5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ca919061589a565b6000858152607c60205260409020555b6040805160608b0135815260c08b013560208201527ffc1b83c11d99d08a938e0b82a0bd45f822f71ff5abf23f999c93c4533d752464910160405180910390a15050505050508015612a66576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b607b805460ff19168215159081179091556040519081527f016436ae56a1958a8efa3965e4839a8a90009e0a225fd19fe89b701c99f3e6e990602001610f82565b82612af95760405162461bcd60e51b815260206004820152600b60248201527f454d5054595f41525241590000000000000000000000000000000000000000006044820152606401610f48565b828114612b485760405162461bcd60e51b815260206004820152600c60248201527f57524f4e475f4c454e47544800000000000000000000000000000000000000006044820152606401610f48565b60005b83811015612bfd57828282818110612b6557612b6561573f565b9050602002016020810190612b7a919061562b565b15612bb757612bb1858583818110612b9457612b9461573f565b9050602002016020810190612ba99190615269565b607290614689565b50612beb565b612be9858583818110612bcc57612bcc61573f565b9050602002016020810190612be19190615269565b60729061469e565b505b80612bf58161576b565b915050612b4b565b507f0d9690f97165f35991ae60d2a97e04aff472c08729722a9236ff1bc8b9ba90c084848484604051612c339493929190615bbb565b60405180910390a150505050565b606980546001600160a01b0319166001600160a01b0383169081179091556040519081527fe86d63ef871123954e3c79261a2ad29d42552412045093f9e7f3ba09a459874290602001610f82565b6060612c9b60726146b3565b905090565b60008167ffffffffffffffff1611612cfa5760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f434f4e4649524d5f504552494f44000000000000000000006044820152606401610f48565b6066805467ffffffffffffffff191667ffffffffffffffff83169081179091556040519081527fa65727a75a71361b541984b5db16e2bd4a6a013f072fe8bb097eafd3844b769790602001610f82565b612d6382612d5d368690038601866159d4565b83613569565b8414612db15760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f415353455254494f4e5f48415348000000000000000000006044820152606401610f48565b50505050565b60006001612dc483613177565b54600160c81b900460ff166002811115612de057612de06154fe565b1492915050565b606b54604080517fee35f32700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ee35f3279160048083019260209291908290030181865afa158015612e4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9b9190615c19565b606680547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16600160401b67ffffffffffffffff8416908102919091179091556040519081527f43f7dc42145cd896e425c1ba47e44ad7fac3214c8993455b88ea382f68a5ed3390602001610f82565b60006111ec6072836146c0565b6001600160a01b038116612f415760405162461bcd60e51b815260206004820152601060248201527f494e56414c49445f455343524f575f30000000000000000000000000000000006044820152606401610f48565b606f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f0b0f78bec1daf434a03f0d26fd75936a5391ef694a7ce32a964a316f40b530dd90602001610f82565b606c80546001600160a01b0319166001600160a01b03838116918217909255606b546040517fcee3d7280000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063cee3d72890604401600060405180830381600087803b15801561300d57600080fd5b505af1158015613021573d6000803e3d6000fd5b50506040516001600160a01b03841681527f0bff4fc5e4cd8fc762bca2b6ff29e3b73a463474097b3f1e972ed2a167b534a792506020019050610f82565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f2000000000000000000000000000000000000000000000000000000001790529051600091829182916064916130cb9190615c5a565b600060405180830381855afa9150503d8060008114613106576040519150601f19603f3d011682016040523d82523d6000602084013e61310b565b606091505b509150915081801561311e575080516020145b9250505090565b61312d613722565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000816131c65760405162461bcd60e51b815260206004820152601b60248201527f415353455254494f4e5f49445f43414e4e4f545f42455f5a45524f00000000006044820152606401610f48565b50600090815260756020526040902090565b61328f823560208401356131f26060860160408701615269565b6132026080870160608801615455565b61321260a0880160808901615455565b60408051602080820197909752808201959095526bffffffffffffffffffffffff19606094851b16938501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b81166074860152911b16607c8301528051606481840301815260849092019052805191012090565b8114610ef75760405162461bcd60e51b815260206004820152601460248201527f434f4e4649475f484153485f4d49534d415443480000000000000000000000006044820152606401610f48565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b546001600160a01b0316919050565b7f49bd798cd84788856140a4cd5030756b4d08a9e4d55db725ec195f232d262a895460ff161561334357612a66836146e2565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561339d575060408051601f3d908101601f1916820190925261339a9181019061589a565b60015b61340f5760405162461bcd60e51b815260206004820152603860248201527f45524331393637557067726164653a206e6577207365636f6e6461727920696d60448201527f706c656d656e746174696f6e206973206e6f74205555505300000000000000006064820152608401610f48565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d81146134a45760405162461bcd60e51b815260206004820152603360248201527f45524331393637557067726164653a20756e737570706f72746564207365636f60448201527f6e646172792070726f786961626c6555554944000000000000000000000000006064820152608401610f48565b50612a668383836147a3565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6134d96147c8565b604080516001600160a01b03928316815291841660208301520160405180910390a16110d3816147f0565b60008160800151600281111561351c5761351c6154fe565b036110d35760405162461bcd60e51b815260206004820152601360248201527f415353455254494f4e5f4e4f545f4558495354000000000000000000000000006044820152606401610f48565b60006135788461274b856144fe565b90505b9392505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156135b557612a6683614893565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561360f575060408051601f3d908101601f1916820190925261360c9181019061589a565b60015b6136815760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608401610f48565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146137165760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152608401610f48565b50612a66838383614937565b60335460ff16610edf5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610f48565b600061377f85613177565b905060018154600160c81b900460ff1660028111156137a0576137a06154fe565b146137ed5760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f50454e44494e470000000000000000000000000000000000000000006044820152606401610f48565b61380684613800368690038601866159d4565b84613569565b85146138545760405162461bcd60e51b815260206004820152600c60248201527f434f4e4649524d5f4441544100000000000000000000000000000000000000006044820152606401610f48565b600061386d61386836869003860186615c76565b614940565b9050600061388861388336879003870187615c76565b614952565b606c546040517fa04cee6000000000000000000000000000000000000000000000000000000000815260048101839052602481018590529192506001600160a01b03169063a04cee6090604401600060405180830381600087803b1580156138ef57600080fd5b505af1158015613903573d6000803e3d6000fd5b50505060748890555082547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff167902000000000000000000000000000000000000000000000000001783556040805183815260208101839052815189927ffc42829b29c259a7370ab56c8f69fce23b5f351a9ce151da453281993ec0090c928290030190a250505050505050565b6001600160a01b038116600090815260776020526040902060020154600160401b900460ff16613a035760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f5354414b4544000000000000000000000000000000000000000000006044820152606401610f48565b6001600160a01b03811660009081526077602052604081206001015460745490919082149080613a3284613177565b5467ffffffffffffffff161190508180613a495750805b612db15760405162461bcd60e51b815260206004820152600c60248201527f5354414b455f41435449564500000000000000000000000000000000000000006044820152606401610f48565b6001600160a01b038083166000908152607760205260408120600281015481549293919269010000000000000000009091049091169080851115613b1b5760405162461bcd60e51b815260206004820152601060248201527f544f4f5f4c4954544c455f5354414b45000000000000000000000000000000006044820152606401610f48565b6000613b278683615c92565b8685559050613b36838261495e565b826001600160a01b0316876001600160a01b03167fd957cf2340073335d256f72a9ef89cf1a43c31143341a6a53575ef33e987beb88489604051613b84929190918252602082015260400190565b60405180910390a39695505050505050565b613b9e614a03565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861315a3390565b600080613be660408601610eee86613177565b6001613bfa61024087016102208801615ca5565b6002811115613c0b57613c0b6154fe565b1480613c3957506002613c2661024087016102208801615ca5565b6002811115613c3757613c376154fe565b145b613c855760405162461bcd60e51b815260206004820152601060248201527f4241445f41465445525f535441545553000000000000000000000000000000006044820152606401610f48565b83613ca78635613c9d36899003890160e08a016159d4565b6020890135613569565b14613cf45760405162461bcd60e51b815260206004820152601460248201527f494e56414c49445f4245464f52455f53544154450000000000000000000000006044820152606401610f48565b6001613d0861018087016101608801615ca5565b6002811115613d1957613d196154fe565b14613d665760405162461bcd60e51b815260206004820152600f60248201527f4241445f505245565f53544154555300000000000000000000000000000000006044820152606401610f48565b6000613d7185613177565b90506000806101a0880160e0890182613d8a8383614a56565b1215613dd85760405162461bcd60e51b815260206004820152600f60248201527f494e424f585f4241434b574152445300000000000000000000000000000000006044820152606401610f48565b6000613dfe613ded60e08d0160c08e01615455565b849067ffffffffffffffff16614b63565b90506000811315613e515760405162461bcd60e51b815260206004820152600d60248201527f494e424f585f544f4f5f464152000000000000000000000000000000000000006044820152606401610f48565b6002613e656102408d016102208e01615ca5565b6002811115613e7657613e766154fe565b14158015613e845750600081125b15613ee657600196506000613e998484614a56565b13613ee65760405162461bcd60e51b815260206004820152601360248201527f4f564552464c4f575f5354414e445354494c4c000000000000000000000000006044820152606401610f48565b606b54604080517e84120c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916284120c9160048083019260209291908290030181865afa158015613f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f6b919061589a565b90506000613f798583614b63565b1315613fc75760405162461bcd60e51b815260206004820152600e60248201527f494e424f585f504153545f454e440000000000000000000000000000000000006044820152606401610f48565b80613fd860e08e0160c08f01615455565b67ffffffffffffffff1611156140305760405162461bcd60e51b815260206004820152601360248201527f494e424f585f4e4f545f504f50554c41544544000000000000000000000000006044820152606401610f48565b600061404961404436879003870187615c76565b614beb565b67ffffffffffffffff16905081810361406e57614067826001615a3b565b9650614072565b8196505b806000036140c25760405162461bcd60e51b815260206004820152601160248201527f454d5054595f494e424f585f434f554e540000000000000000000000000000006044820152606401610f48565b606b546001600160a01b03166316bf55796140de600184615c92565b6040518263ffffffff1660e01b81526004016140fc91815260200190565b602060405180830381865afa158015614119573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061413d919061589a565b9550505050505061415d87896101a001803603810190612d5d91906159d4565b94508585148061416b575085155b6141b75760405162461bcd60e51b815260206004820152601960248201527f554e45585045435445445f415353455254494f4e5f48415348000000000000006044820152606401610f48565b60006141c286613177565b54600160c81b900460ff1660028111156141de576141de6154fe565b1461422b5760405162461bcd60e51b815260206004820152600e60248201527f415353455254494f4e5f5345454e0000000000000000000000000000000000006044820152606401610f48565b825460685460675460695460665460408051602080820196909652808201949094526bffffffffffffffffffffffff19606093841b16928401929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b811660748501529087901b16607c830152805160648184030181526084909201905280519101206000916142cf9167ffffffffffffffff909116159061452e565b90506142da84614bf9565b60008681526075602090815260409182902083518154928501519385015160608601511515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff928316600160801b02167fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff968316600160401b026fffffffffffffffffffffffffffffffff19909616929093169190911793909317939093169290921717808255608083015183929182907fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16600160c81b8360028111156143d3576143d36154fe565b021790555060a0820151816001015590505087867f901c3aee23cf4478825462caaab375c606ab83516060388344f06503407536308b8587606854606754606960009054906101000a90046001600160a01b0316606660009054906101000a900467ffffffffffffffff166040516144519796959493929190615d29565b60405180910390a37f0000000000000000000000000000000000000000000000000000000000000000156144f25760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156144be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144e2919061589a565b6000878152607c60205260409020555b50505050935093915050565b6000816040516020016145119190615dc3565b604051602081830303815290604052805190602001209050919050565b614536615125565b61453e615125565b67ffffffffffffffff4316604082015292151560608401525060a08201526001608082015290565b61456e614c7d565b6002608083018190525060008181526075602090815260409182902084518154928601519386015160608701511515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff928316600160801b02167fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff968316600160401b026fffffffffffffffffffffffffffffffff19909616929093169190911793909317939093169290921717808255608084015184929182907fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16600160c81b836002811115614671576146716154fe565b021790555060a0919091015160019091015560745550565b600061357b836001600160a01b038416614d02565b600061357b836001600160a01b038416614d51565b6060600061357b83614e3a565b6001600160a01b0381166000908152600183016020526040812054151561357b565b6001600160a01b0381163b61475f5760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e74726163740000000000000000006064820152608401610f48565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6147ac83614e96565b6000825111806147b95750805b15612a6657612db18383614ed6565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103613301565b6001600160a01b03811661486c5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610f48565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103614782565b6001600160a01b0381163b6149105760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610f48565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc614782565b6147ac83614efb565b8051600090815b602002015192915050565b80516000906001614947565b6001600160a01b038216600090815260786020526040812054906149828383615a3b565b6001600160a01b03851660009081526078602052604081208290556079805492935085929091906149b4908490615a3b565b909155505060408051838152602081018390526001600160a01b038616917fa740af14c56e4e04a617b1de1eb20de73270decbaaead14f142aabf3038e5ae2910160405180910390a250505050565b60335460ff1615610edf5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610f48565b600080614a6b61404436869003860186615c76565b90506000614a8161404436869003860186615c76565b90508067ffffffffffffffff168267ffffffffffffffff161015614aab57600019925050506111ec565b8067ffffffffffffffff168267ffffffffffffffff161115614ad2576001925050506111ec565b6000614aeb614ae636889003880188615c76565b614f3b565b90506000614b01614ae636889003880188615c76565b90508067ffffffffffffffff168267ffffffffffffffff161015614b2d576000199450505050506111ec565b8067ffffffffffffffff168267ffffffffffffffff161115614b565760019450505050506111ec565b60009450505050506111ec565b600080614b7861404436869003860186615c76565b9050828167ffffffffffffffff161015614b97576000199150506111ec565b828167ffffffffffffffff161115614bb35760019150506111ec565b6000614bc7614ae636879003870187615c76565b67ffffffffffffffff161115614be15760019150506111ec565b60009150506111ec565b602081015160009081614947565b805467ffffffffffffffff16600003614c2957805467ffffffffffffffff19164367ffffffffffffffff16179055565b8054600160401b900467ffffffffffffffff166000036110d35780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16600160401b4367ffffffffffffffff1602179055565b600054610100900460ff16614cfa5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f48565b610edf614f4a565b6000818152600183016020526040812054614d49575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556111ec565b5060006111ec565b60008181526001830160205260408120548015614be1576000614d75600183615c92565b8554909150600090614d8990600190615c92565b9050818114614dee576000866000018281548110614da957614da961573f565b9060005260206000200154905080876000018481548110614dcc57614dcc61573f565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614dff57614dff615dd1565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506111ec565b606081600001805480602002602001604051908101604052809291908181526020018280548015614e8a57602002820191906000526020600020905b815481526020019060010190808311614e76575b50505050509050919050565b614e9f816146e2565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b606061357b8383604051806060016040528060278152602001615e1b60279139614fd3565b614f0481614893565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60208101516000906001614947565b600054610100900460ff16614fc75760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f48565b6033805460ff19169055565b60606001600160a01b0384163b6150525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610f48565b600080856001600160a01b03168560405161506d9190615c5a565b600060405180830381855af49150503d80600081146150a8576040519150601f19603f3d011682016040523d82523d6000602084013e6150ad565b606091505b50915091506150bd8282866150c7565b9695505050505050565b606083156150d657508161357b565b8251156150e65782518084602001fd5b8160405162461bcd60e51b8152600401610f489190615de7565b60405180604001604052806151136151c6565b81526020016151206151c6565b905290565b6040805160c081018252600080825260208201819052918101829052606081018290529060808201905b8152600060209091015290565b60405180606001604052806151ac604080516060808201835260008083526020808401829052845160a0810186528281529081018290528085018290529182018190526080820152909182015290565b81526020016151b96151e4565b81526020016151206151e4565b60405180604001604052806002906020820280368337509192915050565b60405180606001604052806151f7615100565b8152602001600061514f565b60008082840360c081121561521757600080fd5b8335925060a0601f198201121561522d57600080fd5b506020830190509250929050565b60006020828403121561524d57600080fd5b5035919050565b6001600160a01b03811681146110d357600080fd5b60006020828403121561527b57600080fd5b813561357b81615254565b80151581146110d357600080fd5b600080604083850312156152a757600080fd5b82356152b281615254565b915060208301356152c281615286565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715615306576153066152cd565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715615335576153356152cd565b604052919050565b6000806040838503121561535057600080fd5b823561535b81615254565b915060208381013567ffffffffffffffff8082111561537957600080fd5b818601915086601f83011261538d57600080fd5b81358181111561539f5761539f6152cd565b6153b184601f19601f8401160161530c565b915080825287848285010111156153c757600080fd5b80848401858401376000848284010152508093505050509250929050565b600060c082840312156153f757600080fd5b50919050565b600080600080610120858703121561541457600080fd5b843593506020850135925061542c86604087016153e5565b939692955092936101000135925050565b803567ffffffffffffffff811681146112ab57600080fd5b60006020828403121561546757600080fd5b61357b8261543d565b60008083601f84011261548257600080fd5b50813567ffffffffffffffff81111561549a57600080fd5b6020830191508360208260051b85010111156154b557600080fd5b9250929050565b600080602083850312156154cf57600080fd5b823567ffffffffffffffff8111156154e657600080fd5b6154f285828601615470565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b600381106110d357634e487b7160e01b600052602160045260246000fd5b600060c08201905067ffffffffffffffff80845116835280602085015116602084015280604085015116604084015250606083015115156060830152608083015161557c81615514565b8060808401525060a083015160a083015292915050565b60008060008385036102a08112156155aa57600080fd5b84359350610260601f19820112156155c157600080fd5b5060208401915061028084013590509250925092565b6000808284036101408112156155ec57600080fd5b833567ffffffffffffffff81111561560357600080fd5b84016103a0818703121561561657600080fd5b9250610120601f198201121561522d57600080fd5b60006020828403121561563d57600080fd5b813561357b81615286565b6000806000806040858703121561565e57600080fd5b843567ffffffffffffffff8082111561567657600080fd5b61568288838901615470565b9096509450602087013591508082111561569b57600080fd5b506156a887828801615470565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156156f55783516001600160a01b0316835292840192918401916001016156d0565b50909695505050505050565b600080600080610120858703121561571857600080fd5b8435935061572986602087016153e5565b939693955050505060e082013591610100013590565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019820361577e5761577e615755565b5060010190565b8183526000602080850194508260005b858110156157c35781356157a881615254565b6001600160a01b031687529582019590820190600101615795565b509495945050505050565b602081526000613578602083018486615785565b6000602082840312156157f457600080fd5b815161357b81615286565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261583457600080fd5b83018035915067ffffffffffffffff82111561584f57600080fd5b6020019150368190038213156154b557600080fd5b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156158ac57600080fd5b5051919050565b600082601f8301126158c457600080fd5b6040516040810181811067ffffffffffffffff821117156158e7576158e76152cd565b80604052508060408401858111156158fe57600080fd5b845b8181101561591f576159118161543d565b835260209283019201615900565b509195945050505050565b60006080828403121561593c57600080fd5b6040516040810181811067ffffffffffffffff8211171561595f5761595f6152cd565b604052905080601f8301841361597457600080fd5b61597c6152e3565b80604085018681111561598e57600080fd5b855b818110156159a8578035845260209384019301615990565b508184526159b687826158b3565b60208501525050505092915050565b8035600381106112ab57600080fd5b600060c082840312156159e657600080fd5b6040516060810181811067ffffffffffffffff82111715615a0957615a096152cd565b604052615a16848461592a565b8152615a24608084016159c5565b602082015260a09290920135604083015250919050565b808201808211156111ec576111ec615755565b615a5781615514565b9052565b805180518360005b6002811015615a82578251825260209283019290910190600101615a63565b505050602090810151906040840160005b6002811015615aba57835167ffffffffffffffff1682529282019290820190600101615a93565b50508201519050615ace6080840182615a4e565b506040015160a09190910152565b600061032082019050885180518352602081015160208401526040810151905080516040840152602081015160608401526001600160a01b036040820151166080840152606081015167ffffffffffffffff80821660a08601528060808401511660c08601525050506020890151615b5760e0840182615a5b565b506040890151615b6b6101a0840182615a5b565b508761026083015286610280830152856102a0830152846102c0830152615b9e6102e08301856001600160a01b03169052565b67ffffffffffffffff831661030083015298975050505050505050565b604081526000615bcf604083018688615785565b8281036020848101919091528482528591810160005b86811015615c0c578335615bf881615286565b151582529282019290820190600101615be5565b5098975050505050505050565b600060208284031215615c2b57600080fd5b815161357b81615254565b60005b83811015615c51578181015183820152602001615c39565b50506000910152565b60008251615c6c818460208701615c36565b9190910192915050565b600060808284031215615c8857600080fd5b61357b838361592a565b818103818111156111ec576111ec615755565b600060208284031215615cb757600080fd5b61357b826159c5565b6040818337604082016040820160005b6002811015615d015767ffffffffffffffff615ceb8361543d565b1683526020928301929190910190600101615cd0565b505050615d10608082016159c5565b615d1981615514565b608083015260a090810135910152565b600061032082019050883582526020890135602083015260408901356040830152606089013560608301526080890135615d6281615254565b6001600160a01b03166080830152615d7c60a08a0161543d565b67ffffffffffffffff80821660a085015280615d9a60c08d0161543d565b1660c08501525050615db260e0830160e08b01615cc0565b6101a0615b6b818401828c01615cc0565b60c081016111ec8284615a5b565b634e487b7160e01b600052603160045260246000fd5b6020815260008251806020840152615e06816040850160208701615c36565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207842d2e73db32b835a98aca71a611bc31ef04b3f31df3d265cc32050d685186164736f6c63430008110033", } // RollupAdminLogicABI is the input ABI used to generate the binding from. @@ -22911,7 +22911,7 @@ func (_RollupCore *RollupCoreFilterer) ParseUserWithdrawableFundsUpdated(log typ // RollupCreatorMetaData contains all meta data concerning the RollupCreator contract. var RollupCreatorMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rollupAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inboxAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"adminProxy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"upgradeExecutor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validatorWalletCreator\",\"type\":\"address\"}],\"name\":\"RollupCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"TemplatesUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridgeCreator\",\"outputs\":[{\"internalType\":\"contractBridgeCreator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeManagerTemplate\",\"outputs\":[{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"stakeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseStake\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"loserStakeEscrow\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"miniStakeValues\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"sequencerInboxMaxTimeVariation\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBlockEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBigStepEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroSmallStepEdgeHeight\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"genesisAssertionState\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"genesisInboxCount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"anyTrustFastConfirmer\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"numBigStepLevel\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"challengeGracePeriodBlocks\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"threshold\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"replenishRateInBasis\",\"type\":\"uint64\"}],\"internalType\":\"structBufferConfig\",\"name\":\"bufferConfig\",\"type\":\"tuple\"}],\"internalType\":\"structConfig\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"validators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"maxDataSize\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"nativeToken\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"deployFactoriesToL2\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGasForRetryables\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"batchPosters\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"batchPosterManager\",\"type\":\"address\"}],\"internalType\":\"structRollupCreator.RollupDeploymentParams\",\"name\":\"deployParams\",\"type\":\"tuple\"}],\"name\":\"createRollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2FactoriesDeployer\",\"outputs\":[{\"internalType\":\"contractDeployHelper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"osp\",\"outputs\":[{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupAdminLogic\",\"outputs\":[{\"internalType\":\"contractIRollupAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupUserLogic\",\"outputs\":[{\"internalType\":\"contractIRollupUser\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractBridgeCreator\",\"name\":\"_bridgeCreator\",\"type\":\"address\"},{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"_osp\",\"type\":\"address\"},{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"_challengeManagerLogic\",\"type\":\"address\"},{\"internalType\":\"contractIRollupAdmin\",\"name\":\"_rollupAdminLogic\",\"type\":\"address\"},{\"internalType\":\"contractIRollupUser\",\"name\":\"_rollupUserLogic\",\"type\":\"address\"},{\"internalType\":\"contractIUpgradeExecutor\",\"name\":\"_upgradeExecutorLogic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_validatorWalletCreator\",\"type\":\"address\"},{\"internalType\":\"contractDeployHelper\",\"name\":\"_l2FactoriesDeployer\",\"type\":\"address\"}],\"name\":\"setTemplates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upgradeExecutorLogic\",\"outputs\":[{\"internalType\":\"contractIUpgradeExecutor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWalletCreator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6155d0806200007f6000396000f3fe608060405260043610620000e75760003560e01c80639dba32411162000089578063f0dae4941162000060578063f0dae494146200022d578063f26a62c61462000252578063f2fde38b1462000274578063f860cefa146200029957600080fd5b80639dba324114620001c7578063ac0425bc14620001e9578063bc45e0ae146200020b57600080fd5b80638da5cb5b11620000be5780638da5cb5b14620001635780639c683d1014620001835780639d4798e314620001a557600080fd5b8063030cb85e14620000f45780635491abea1462000132578063715018a6146200014957600080fd5b36620000ef57005b600080fd5b3480156200010157600080fd5b5060065462000116906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b620001166200014336600462002032565b620002bb565b3480156200015657600080fd5b506200016162000ee7565b005b3480156200017057600080fd5b506000546001600160a01b031662000116565b3480156200019057600080fd5b5060035462000116906001600160a01b031681565b348015620001b257600080fd5b5060055462000116906001600160a01b031681565b348015620001d457600080fd5b5060045462000116906001600160a01b031681565b348015620001f657600080fd5b5060085462000116906001600160a01b031681565b3480156200021857600080fd5b5060075462000116906001600160a01b031681565b3480156200023a57600080fd5b50620001616200024c36600462002143565b62000eff565b3480156200025f57600080fd5b5060025462000116906001600160a01b031681565b3480156200028157600080fd5b506200016162000293366004620021fd565b62000fce565b348015620002a657600080fd5b5060015462000116906001600160a01b031681565b600080600080600160009054906101000a90046001600160a01b03166001600160a01b03166311f022276040518163ffffffff1660e01b815260040160c060405180830381865afa15801562000315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033b91906200221d565b505093509350935050826001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000383573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a99190620022b1565b856040015114620004015760405162461bcd60e51b815260206004820152601960248201527f53495f4d41585f444154415f53495a455f4d49534d415443480000000000000060448201526064015b60405180910390fd5b816001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000440573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004669190620022b1565b856040015114620004ba5760405162461bcd60e51b815260206004820152601960248201527f53495f4d41585f444154415f53495a455f4d49534d41544348000000000000006044820152606401620003f8565b806001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200051f9190620022b1565b856040015114620005735760405162461bcd60e51b815260206004820152601860248201527f495f4d41585f444154415f53495a455f4d49534d4154434800000000000000006044820152606401620003f8565b6000806000600160009054906101000a90046001600160a01b03166001600160a01b03166376768ab96040518163ffffffff1660e01b815260040160c060405180830381865afa158015620005cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005f291906200221d565b505093509350935050826001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200063a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006609190620022b1565b886040015114620006b45760405162461bcd60e51b815260206004820152601960248201527f53495f4d41585f444154415f53495a455f4d49534d41544348000000000000006044820152606401620003f8565b816001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007199190620022b1565b8860400151146200076d5760405162461bcd60e51b815260206004820152601960248201527f53495f4d41585f444154415f53495a455f4d49534d41544348000000000000006044820152606401620003f8565b806001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015620007ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007d29190620022b1565b886040015114620008265760405162461bcd60e51b815260206004820152601860248201527f495f4d41585f444154415f53495a455f4d49534d4154434800000000000000006044820152606401620003f8565b50505050505060006040516200083c90620019ab565b604051809103906000f08015801562000859573d6000803e3d6000fd5b509050600083604051602001620008719190620025ef565b604051602081830303815290604052805190602001206040516200089590620019b9565b8190604051809103906000f5905080158015620008b6573d6000803e3d6000fd5b5060015460608601518651610120810151610240909101516040517f57d3a2000000000000000000000000000000000000000000000000000000000081529495506000946001600160a01b03909416936357d3a200936200091e9389938993600401620026b7565b60a0604051808303816000875af11580156200093e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096491906200273d565b90506000620009798385886000015162001064565b90506000620009918760000151608001518662001187565b6040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192509086169063f2fde38b90602401600060405180830381600087803b158015620009f257600080fd5b505af115801562000a07573d6000803e3d6000fd5b50508851306080918201528951604080516101208101825288516001600160a01b0390811682528983015181166020808401919091528a01518116828401528985015181166060808401919091528a015181169482019490945287841660a082015260048054851660c0830152600554851660e0830152600754851661010083015291517fd384644b000000000000000000000000000000000000000000000000000000008152938a16955063d384644b945062000ac893909101620027e3565b600060405180830381600087803b15801562000ae357600080fd5b505af115801562000af8573d6000803e3d6000fd5b5050505060005b8760c001515181101562000bd45783604001516001600160a01b0316636e7df3e78960c00151838151811062000b395762000b39620028c9565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b15801562000ba557600080fd5b505af115801562000bba573d6000803e3d6000fd5b50505050808062000bcb90620028df565b91505062000aff565b5060e08701516001600160a01b03161562000c6a5760408084015160e089015191517f1ff647900000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152911690631ff6479090602401600060405180830381600087803b15801562000c5057600080fd5b505af115801562000c65573d6000803e3d6000fd5b505050505b6020870151511562000d9757600087602001515167ffffffffffffffff81111562000c995762000c99620019d5565b60405190808252806020026020018201604052801562000cc3578160200160208202803683370190505b50905060005b88602001515181101562000d1357600182828151811062000cee5762000cee620028c9565b911515602092830291909101909101528062000d0a81620028df565b91505062000cc9565b5060208801516040517fa3ffb7720000000000000000000000000000000000000000000000000000000081526001600160a01b0387169163a3ffb7729162000d619190859060040162002926565b600060405180830381600087803b15801562000d7c57600080fd5b505af115801562000d91573d6000803e3d6000fd5b50505050505b6040517f13af40350000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301528516906313af403590602401600060405180830381600087803b15801562000df457600080fd5b505af115801562000e09573d6000803e3d6000fd5b5050505086608001511562000e315762000e31836020015188606001518960a00151620012b6565b606087810151602085810151608080880151888601516040808b01518b5160075483516001600160a01b03988916815295881698860198909852928616848301528a8616988401989098528c85169383019390935295831660a082015294821660c086015285821660e0860152918116610100850152905191811692908716917fd9bfd3bb3012f0caa103d1ba172692464d2de5c7b75877ce255c72147086a79d918190036101200190a3509195945050505050565b62000ef1620015c2565b62000efd60006200161e565b565b62000f09620015c2565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b038b8116919091179092556002805482168a8416179055600380548216898416179055600480548216888416179055600580548216878416179055600680548216868416179055600780548216858416179055600880549091169183169190911790556040517fc9d3947d22fa124aaec4c7e8c919f79016e2d7b48eee10568375d98b86460d1b90600090a15050505050505050565b62000fd8620015c2565b6001600160a01b038116620010565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620003f8565b62001061816200161e565b50565b60035460405160009182916001600160a01b039091169085906200108890620019c7565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f080158015620010cb573d6000803e3d6000fd5b509050806001600160a01b0316631a72d54c868560000151600260009054906101000a90046001600160a01b03168761014001518861016001518961018001518a602001518b608001518c61020001518d61010001516040518b63ffffffff1660e01b8152600401620011489a9998979695949392919062002983565b600060405180830381600087803b1580156200116357600080fd5b505af115801562001178573d6000803e3d6000fd5b509293505050505b9392505050565b6006546040805160208101825260008082529151919283926001600160a01b03909116918591620011b890620019c7565b620011c69392919062002a00565b604051809103906000f080158015620011e3573d6000803e3d6000fd5b5060408051600180825281830190925291925060009190602080830190803683370190505090508481600081518110620012215762001221620028c9565b6001600160a01b0392831660209182029290920101526040517f946d92040000000000000000000000000000000000000000000000000000000081529083169063946d92049062001279908590859060040162002a37565b600060405180830381600087803b1580156200129457600080fd5b505af1158015620012a9573d6000803e3d6000fd5b5093979650505050505050565b6001600160a01b03821662001487576008546040517facd7d02a0000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260248201849052600092169063acd7d02a90604401602060405180830381865afa15801562001331573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013579190620022b1565b6008546040517fd7c641e70000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015286811660248301526044820186905292935091169063d7c641e79083906064016000604051808303818588803b158015620013ca57600080fd5b505af1158015620013df573d6000803e3d6000fd5b5050604051600093503392504791508381818185875af1925050503d806000811462001428576040519150601f19603f3d011682016040523d82523d6000602084013e6200142d565b606091505b5050905080620014805760405162461bcd60e51b815260206004820152600d60248201527f526566756e64206661696c6564000000000000000000000000000000000000006044820152606401620003f8565b5050505050565b6008546040517facd7d02a0000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260248201849052600092169063acd7d02a90604401602060405180830381865afa158015620014f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015199190620022b1565b9050620015326001600160a01b03841633868462001686565b6008546040517fd7c641e70000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301528581166024830152604482018590529091169063d7c641e790606401600060405180830381600087803b158015620015a257600080fd5b505af1158015620015b7573d6000803e3d6000fd5b50505050505b505050565b6000546001600160a01b0316331462000efd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620003f8565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526200171090859062001716565b50505050565b60006200176d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620018029092919063ffffffff16565b805190915015620015bd57808060200190518101906200178e919062002a5b565b620015bd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620003f8565b60606200181384846000856200181b565b949350505050565b606082471015620018955760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620003f8565b6001600160a01b0385163b620018ee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620003f8565b600080866001600160a01b031685876040516200190c919062002a7b565b60006040518083038185875af1925050503d80600081146200194b576040519150601f19603f3d011682016040523d82523d6000602084013e62001950565b606091505b5091509150620019628282866200196d565b979650505050505050565b606083156200197e57508162001180565b8251156200198f5782518084602001fd5b8160405162461bcd60e51b8152600401620003f8919062002a99565b61080b8062002aaf83390190565b61140e80620032ba83390190565b610ed380620046c883390190565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171562001a115762001a11620019d5565b60405290565b6040805190810167ffffffffffffffff8111828210171562001a115762001a11620019d5565b604051610260810167ffffffffffffffff8111828210171562001a115762001a11620019d5565b604051610100810167ffffffffffffffff8111828210171562001a115762001a11620019d5565b604051601f8201601f1916810167ffffffffffffffff8111828210171562001ab75762001ab7620019d5565b604052919050565b803567ffffffffffffffff8116811462001ad857600080fd5b919050565b6001600160a01b03811681146200106157600080fd5b803562001ad88162001add565b600082601f83011262001b1257600080fd5b813567ffffffffffffffff81111562001b2f5762001b2f620019d5565b62001b446020601f19601f8401160162001a8b565b81815284602083860101111562001b5a57600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff82111562001b945762001b94620019d5565b5060051b60200190565b600082601f83011262001bb057600080fd5b8135602062001bc962001bc38362001b77565b62001a8b565b82815260059290921b8401810191818101908684111562001be957600080fd5b8286015b8481101562001c06578035835291830191830162001bed565b509695505050505050565b60006080828403121562001c2457600080fd5b6040516080810181811067ffffffffffffffff8211171562001c4a5762001c4a620019d5565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b600082601f83011262001c8d57600080fd5b62001c9762001a17565b80604084018581111562001caa57600080fd5b845b8181101562001ccf5762001cc08162001abf565b84526020938401930162001cac565b509095945050505050565b80356003811062001ad857600080fd5b600081830360c081121562001cfe57600080fd5b62001d08620019eb565b9150608081121562001d1957600080fd5b5062001d2462001a17565b83601f84011262001d3457600080fd5b62001d3e62001a17565b80604085018681111562001d5157600080fd5b855b8181101562001d6d57803584526020938401930162001d53565b5081845262001d7d878262001c7b565b6020850152505050815262001d956080830162001cda565b602082015260a0820135604082015292915050565b803560ff8116811462001ad857600080fd5b60006060828403121562001dcf57600080fd5b62001dd9620019eb565b905062001de68262001abf565b815262001df66020830162001abf565b602082015262001e096040830162001abf565b604082015292915050565b60006103a0828403121562001e2857600080fd5b62001e3262001a3d565b905062001e3f8262001abf565b815262001e4f6020830162001af3565b6020820152604082013560408201526060820135606082015262001e766080830162001af3565b608082015262001e8960a0830162001af3565b60a082015260c082013560c082015260e082013567ffffffffffffffff8082111562001eb457600080fd5b62001ec28583860162001b00565b60e08401526101009150818401358181111562001ede57600080fd5b62001eec8682870162001b9e565b8385015250505061012062001f048482850162001c11565b908201526101a0828101356101408301526101c0808401356101608401526101e08085013561018085015261020062001f408782880162001cea565b848601526102c08601358386015262001f5d6102e0870162001af3565b8286015262001f70610300870162001daa565b818601525050505062001f87610320830162001abf565b61022082015262001f9d83610340840162001dbc565b61024082015292915050565b600082601f83011262001fbb57600080fd5b8135602062001fce62001bc38362001b77565b82815260059290921b8401810191818101908684111562001fee57600080fd5b8286015b8481101562001c06578035620020088162001add565b835291830191830162001ff2565b80151581146200106157600080fd5b803562001ad88162002016565b6000602082840312156200204557600080fd5b813567ffffffffffffffff808211156200205e57600080fd5b9083019061010082860312156200207457600080fd5b6200207e62001a64565b8235828111156200208e57600080fd5b6200209c8782860162001e14565b825250602083013582811115620020b257600080fd5b620020c08782860162001fa9565b60208301525060408301356040820152620020de6060840162001af3565b6060820152620020f16080840162002025565b608082015260a083013560a082015260c0830135828111156200211357600080fd5b620021218782860162001fa9565b60c0830152506200213560e0840162001af3565b60e082015295945050505050565b600080600080600080600080610100898b0312156200216157600080fd5b88356200216e8162001add565b97506020890135620021808162001add565b96506040890135620021928162001add565b95506060890135620021a48162001add565b94506080890135620021b68162001add565b935060a0890135620021c88162001add565b925060c0890135620021da8162001add565b915060e0890135620021ec8162001add565b809150509295985092959890939650565b6000602082840312156200221057600080fd5b8135620011808162001add565b60008060008060008060c087890312156200223757600080fd5b8651620022448162001add565b6020880151909650620022578162001add565b60408801519095506200226a8162001add565b60608801519094506200227d8162001add565b6080880151909350620022908162001add565b60a0880151909250620022a38162001add565b809150509295509295509295565b600060208284031215620022c457600080fd5b5051919050565b60005b83811015620022e8578181015183820152602001620022ce565b50506000910152565b600081518084526200230b816020860160208601620022cb565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015620023515781518752958201959082019060010162002333565b509495945050505050565b600381106200237b57634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b6002811015620023a857825182526020928301929091019060010162002387565b505050602090810151906040840160005b6002811015620023e257835167ffffffffffffffff1682529282019290820190600101620023b9565b50508201519050620023f860808401826200235c565b506040015160a09190910152565b805167ffffffffffffffff16825260006103a060208301516200243460208601826001600160a01b03169052565b50604083015160408501526060830151606085015260808301516200246460808601826001600160a01b03169052565b5060a08301516200248060a08601826001600160a01b03169052565b5060c083015160c085015260e08301518160e0860152620024a482860182620022f1565b9150506101008084015185830382870152620024c183826200231f565b6101208681015180518983015260208101516101408a015260408101516101608a015260608101516101808a01529194509250905050506101408301516101a0818187015261016085015191506101c0828188015261018086015192506101e0838189015282870151935061020092506200253f838901856200237f565b908601516102c08801528501516001600160a01b03166102e087015284015160ff166103008601525061022083015167ffffffffffffffff908116610320860152610240840151805182166103408701526020810151821661036087015260408101519091166103808601525b509392505050565b600081518084526020808501945080840160005b83811015620023515781516001600160a01b031687529582019590820190600101620025c8565b60208152600082516101008060208501526200261061012085018362002406565b91506020850151601f1980868503016040870152620026308483620025b4565b935060408701516060870152606087015191506200265960808701836001600160a01b03169052565b608087015180151560a0880152915060a087015160c087015260c08701519150808685030160e087015250620026908382620025b4565b92505060e0850151620026ad828601826001600160a01b03169052565b5090949350505050565b6001600160a01b0386811682528581166020830152841660408201526101408101620027076060830185805182526020810151602083015260408101516040830152606081015160608301525050565b825167ffffffffffffffff90811660e0840152602084015181166101008401526040840151166101208301529695505050505050565b600060a082840312156200275057600080fd5b60405160a0810181811067ffffffffffffffff82111715620027765762002776620019d5565b6040528251620027868162001add565b81526020830151620027988162001add565b60208201526040830151620027ad8162001add565b60408201526060830151620027c28162001add565b60608201526080830151620027d78162001add565b60808201529392505050565b6000610140808352620027f98184018662002406565b9150506001600160a01b03835116602083015260208301516200282760408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516001600160a01b03811660808401525060808301516001600160a01b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160a01b03811660e08401525060e0830151610100620028ae818501836001600160a01b03169052565b8401516001600160a01b0381166101208501529050620025ac565b634e487b7160e01b600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200291f57634e487b7160e01b600052601160045260246000fd5b5060010190565b6040815260006200293b6040830185620025b4565b82810360208481019190915284518083528582019282019060005b818110156200297657845115158352938301939183019160010162002956565b5090979650505050505050565b60006101406001600160a01b03808e16845267ffffffffffffffff8d166020850152808c1660408501528a60608501528960808501528860a085015280881660c085015280871660e08501525060ff851661010084015280610120840152620029ef818401856200231f565b9d9c50505050505050505050505050565b60006001600160a01b0380861683528085166020840152506060604083015262002a2e6060830184620022f1565b95945050505050565b6001600160a01b0383168152604060208201526000620018136040830184620025b4565b60006020828403121562002a6e57600080fd5b8151620011808162002016565b6000825162002a8f818460208701620022cb565b9190910192915050565b602081526000620011806020830184620022f156fe608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61078d8061007e6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610579565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d161022e565b005b3480156100df57600080fd5b506100d16100ee36600461059d565b610242565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f366004610605565b6102c3565b34801561013057600080fd5b506100d161013f36600461059d565b61034b565b34801561015057600080fd5b506100d161015f366004610579565b61039a565b34801561017057600080fd5b506100a061017f366004610579565b610449565b6000806000836001600160a01b03166040516101c3907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d80600081146101fe576040519150601f19603f3d011682016040523d82523d6000602084013e610203565b606091505b50915091508161021257600080fd5b8080602001905181019061022691906106db565b949350505050565b610236610488565b61024060006104fc565b565b61024a610488565b6040517f8f2839700000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b1580156102a757600080fd5b505af11580156102bb573d6000803e3d6000fd5b505050505050565b6102cb610488565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef28690349061031490869086906004016106f8565b6000604051808303818588803b15801561032d57600080fd5b505af1158015610341573d6000803e3d6000fd5b5050505050505050565b610353610488565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690633659cfe69060240161028d565b6103a2610488565b6001600160a01b03811661043d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610446816104fc565b50565b6000806000836001600160a01b03166040516101c3907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000546001600160a01b03163314610240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610434565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461044657600080fd5b60006020828403121561058b57600080fd5b813561059681610564565b9392505050565b600080604083850312156105b057600080fd5b82356105bb81610564565b915060208301356105cb81610564565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561061a57600080fd5b833561062581610564565b9250602084013561063581610564565b9150604084013567ffffffffffffffff8082111561065257600080fd5b818601915086601f83011261066657600080fd5b813581811115610678576106786105d6565b604051601f8201601f19908116603f011681019083821181831017156106a0576106a06105d6565b816040528281528960208487010111156106b957600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156106ed57600080fd5b815161059681610564565b6001600160a01b038316815260006020604081840152835180604085015260005b8181101561073557858101830151858201606001528201610719565b506000606082860101526060601f19601f83011685010192505050939250505056fea2646970667358221220b5f17b9b80290312697ad0c26141bee28c1a1e448364e9044054c3ec2b5708bd64736f6c63430008110033608060405234801561001057600080fd5b506113ee806100206000396000f3fe6080604052600436106100225760003560e01c8063d384644b1461003957610031565b366100315761002f610059565b005b61002f610059565b34801561004557600080fd5b5061002f610054366004610d95565b61006b565b6100696100646101bd565b6102a1565b565b60006100756102ca565b6001600160a01b031614801561009b575060006100906102fd565b6001600160a01b0316145b80156100b7575060006100ac610325565b6001600160a01b0316145b156101b5576101b18160c0015183836040516024016100d792919061113d565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9e7e6aa70000000000000000000000000000000000000000000000000000000017905260e08601519087015191516001600160a01b0390921660248301529060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052608087015161034d565b5050565b6101b1610059565b600060043610156102155760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f46554e435f53494700000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000336102206102ca565b6001600160a01b03160361023b576102366102fd565b610243565b610243610325565b90506001600160a01b0381163b61029c5760405162461bcd60e51b815260206004820152601360248201527f5441524745545f4e4f545f434f4e545241435400000000000000000000000000604482015260640161020c565b919050565b3660008037600080366000845af43d6000803e8080156102c0573d6000f35b3d6000fd5b505050565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102ee565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6102ee565b61037860017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610461132b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103146103a6576103a661134c565b6103d160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61132b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc146103ff576103ff61134c565b61042a60017f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546e61132b565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d146104585761045861134c565b61046181610480565b61046d858560006104d7565b61047983836000610502565b5050505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104a96102ca565b604080516001600160a01b03928316815291841660208301520160405180910390a16104d48161050b565b50565b6104e0836105e3565b6000825111806104ed5750805b156102c5576104fc8383610623565b50505050565b6104e083610651565b6001600160a01b0381166105875760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161020c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6105ec81610691565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610648838360405180606001604052806027815260200161139260279139610735565b90505b92915050565b61065a8161082b565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b6001600160a01b0381163b61070e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161020c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105aa565b60606001600160a01b0384163b6107b45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161020c565b600080856001600160a01b0316856040516107cf9190611362565b600060405180830381855af49150503d806000811461080a576040519150601f19603f3d011682016040523d82523d6000602084013e61080f565b606091505b509150915061081f8282866108cf565b925050505b9392505050565b6001600160a01b0381163b6108a85760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e7472616374000000000000000000606482015260840161020c565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6105aa565b606083156108de575081610824565b8251156108ee5782518084602001fd5b8160405162461bcd60e51b815260040161020c919061137e565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561094157610941610908565b60405290565b6040805190810167ffffffffffffffff8111828210171561094157610941610908565b604051610120810167ffffffffffffffff8111828210171561094157610941610908565b604051610260810167ffffffffffffffff8111828210171561094157610941610908565b604051601f8201601f1916810167ffffffffffffffff811182821017156109db576109db610908565b604052919050565b803567ffffffffffffffff8116811461029c57600080fd5b80356001600160a01b038116811461029c57600080fd5b600082601f830112610a2357600080fd5b813567ffffffffffffffff811115610a3d57610a3d610908565b610a506020601f19601f840116016109b2565b818152846020838601011115610a6557600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610a9357600080fd5b8135602067ffffffffffffffff821115610aaf57610aaf610908565b8160051b610abe8282016109b2565b9283528481018201928281019087851115610ad857600080fd5b83870192505b84831015610af757823582529183019190830190610ade565b979650505050505050565b600060808284031215610b1457600080fd5b6040516080810181811067ffffffffffffffff82111715610b3757610b37610908565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b600082601f830112610b7957600080fd5b610b81610947565b806040840185811115610b9357600080fd5b845b81811015610bb457610ba6816109e3565b845260209384019301610b95565b509095945050505050565b80356003811061029c57600080fd5b600081830360c0811215610be157600080fd5b610be961091e565b91506080811215610bf957600080fd5b50610c02610947565b83601f840112610c1157600080fd5b610c19610947565b806040850186811115610c2b57600080fd5b855b81811015610c45578035845260209384019301610c2d565b50818452610c538782610b68565b60208501525050508152610c6960808301610bbf565b602082015260a0820135604082015292915050565b803560ff8116811461029c57600080fd5b600060608284031215610ca157600080fd5b610ca961091e565b9050610cb4826109e3565b8152610cc2602083016109e3565b6020820152610cd3604083016109e3565b604082015292915050565b60006101208284031215610cf157600080fd5b610cf961096a565b9050610d04826109fb565b8152610d12602083016109fb565b6020820152610d23604083016109fb565b6040820152610d34606083016109fb565b6060820152610d45608083016109fb565b6080820152610d5660a083016109fb565b60a0820152610d6760c083016109fb565b60c0820152610d7860e083016109fb565b60e0820152610100610d8b8184016109fb565b9082015292915050565b600080610140808486031215610daa57600080fd5b833567ffffffffffffffff80821115610dc257600080fd5b908501906103a08288031215610dd757600080fd5b610ddf61098e565b610de8836109e3565b8152610df6602084016109fb565b60208201526040830135604082015260608301356060820152610e1b608084016109fb565b6080820152610e2c60a084016109fb565b60a082015260c083013560c082015260e083013582811115610e4d57600080fd5b610e5989828601610a12565b60e0830152506101008084013583811115610e7357600080fd5b610e7f8a828701610a82565b8284015250506101209150610e9688838501610b02565b828201526101a0915081830135848201526101c09350838301356101608201526101e080840135610180830152610200610ed28a828701610bce565b848401526102c085013586840152610eed6102e086016109fb565b82840152610efe6103008601610c7e565b9083015250610f1061032084016109e3565b610220820152610f24886103408501610c8f565b61024082015280955050505050610f3e8460208501610cde565b90509250929050565b60005b83811015610f62578181015183820152602001610f4a565b50506000910152565b60008151808452610f83816020860160208601610f47565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015610fc757815187529582019590820190600101610fab565b509495945050505050565b60038110610ff057634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b600281101561101b578251825260209283019290910190600101610ffc565b505050602090810151906040840160005b600281101561105357835167ffffffffffffffff168252928201929082019060010161102c565b505082015190506110676080840182610fd2565b506040015160a09190910152565b6001600160a01b038082511683528060208301511660208401528060408301511660408401525060608101516110b660608401826001600160a01b03169052565b5060808101516110d160808401826001600160a01b03169052565b5060a08101516110ec60a08401826001600160a01b03169052565b5060c081015161110760c08401826001600160a01b03169052565b5060e081015161112260e08401826001600160a01b03169052565b50610100818101516001600160a01b038116848301526104fc565b600061014080835261115b818401865167ffffffffffffffff169052565b6020850151610160611177818601836001600160a01b03169052565b604087015191506101808281870152606088015192506101a08381880152608089015193506101c06111b3818901866001600160a01b03169052565b60a08a015194506101e06111d1818a01876001600160a01b03169052565b60c08b0151955061020086818b015260e08c015196506102206103a0818c01526111ff6104e08c0189610f6b565b97506101008d01516102407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08d8b0301818e015261123d8a83610f97565b99506101208f015191506112766102608e0183805182526020810151602083015260408101516040830152606081015160608301525050565b998e01516102e08d0152878e01516103008d0152868e01516103208d0152858e0151996112a76103408e018c610ff4565b948e01516104008d015250918c01516001600160a01b03166104208b01528b015160ff166104408a01528a015167ffffffffffffffff9081166104608a0152908a0151805182166104808a0152602081015182166104a08a015260408101519091166104c0890152945061131a92505050565b915061082490506020830184611075565b8181038181111561064b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b60008251611374818460208701610f47565b9190910192915050565b6020815260006106486020830184610f6b56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207000f262e4a68ed485ac638f102eeaeb35ce8732f42c868f124f4b40522e1b9464736f6c63430008110033608060405260405162000ed338038062000ed3833981016040819052620000269162000487565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ba565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b6200023e1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000eac60279139620002f8565b9392505050565b60006200018060008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a81620003e160201b6200026a1760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620003de60201b620001fa1760201c565b60606001600160a01b0384163b620003625760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001f1565b600080856001600160a01b0316856040516200037f919062000567565b600060405180830381855af49150503d8060008114620003bc576040519150601f19603f3d011682016040523d82523d6000602084013e620003c1565b606091505b509092509050620003d4828286620003f0565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620004015750816200014f565b825115620004125782518084602001fd5b8160405162461bcd60e51b8152600401620001f1919062000585565b80516001600160a01b03811681146200044657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200047e57818101518382015260200162000464565b50506000910152565b6000806000606084860312156200049d57600080fd5b620004a8846200042e565b9250620004b8602085016200042e565b60408501519092506001600160401b0380821115620004d657600080fd5b818601915086601f830112620004eb57600080fd5b8151818111156200050057620005006200044b565b604051601f8201601f19908116603f011681019083821181831017156200052b576200052b6200044b565b816040528281528960208487010111156200054557600080fd5b6200055883602083016020880162000461565b80955050505050509250925092565b600082516200057b81846020870162000461565b9190910192915050565b6020815260008251806020840152620005a681604085016020870162000461565b601f01601f19169190910160400192915050565b6108c280620005ca6000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610736565b610128565b61006b6100a3366004610751565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610736565b6101fd565b34801561010557600080fd5b506100bd61021d565b610116610279565b610126610121610329565b610333565b565b610130610357565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061038a565b50565b61015a61010e565b61016d610357565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061038a915050565b505050565b6101bf61010e565b60006101d6610357565b6001600160a01b031633036101f2576101ed610329565b905090565b6101fa61010e565b90565b610205610357565b6001600160a01b0316330361015d5761015a816103b5565b6000610227610357565b6001600160a01b031633036101f2576101ed610357565b6060610263838360405180606001604052806027815260200161086660279139610409565b9392505050565b6001600160a01b03163b151590565b610281610357565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6104fd565b3660008037600080366000845af43d6000803e808015610352573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61039383610525565b6000825111806103a05750805b156101bf576103af838361023e565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103de610357565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610565565b60606001600160a01b0384163b6104885760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610320565b600080856001600160a01b0316856040516104a391906107f8565b600060405180830381855af49150503d80600081146104de576040519150601f19603f3d011682016040523d82523d6000602084013e6104e3565b606091505b50915091506104f382828661063d565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61037b565b61052e81610676565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105e15760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610320565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060831561064c575081610263565b82511561065c5782518084602001fd5b8160405162461bcd60e51b81526004016103209190610814565b6001600160a01b0381163b6106f35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610320565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610604565b80356001600160a01b038116811461073157600080fd5b919050565b60006020828403121561074857600080fd5b6102638261071a565b60008060006040848603121561076657600080fd5b61076f8461071a565b9250602084013567ffffffffffffffff8082111561078c57600080fd5b818601915086601f8301126107a057600080fd5b8135818111156107af57600080fd5b8760208285010111156107c157600080fd5b6020830194508093505050509250925092565b60005b838110156107ef5781810151838201526020016107d7565b50506000910152565b6000825161080a8184602087016107d4565b9190910192915050565b60208152600082518060208401526108338160408501602087016107d4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c1888b421836e473bfc3e72d153dc5c76569ce769e37cfa444506490e142daa564736f6c63430008110033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205266d5f8e3c9da411da3bc1d622281df4af3f4e56ef5de0995d995d3e86be28764736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6155d0806200007f6000396000f3fe608060405260043610620000e75760003560e01c80639dba32411162000089578063f0dae4941162000060578063f0dae494146200022d578063f26a62c61462000252578063f2fde38b1462000274578063f860cefa146200029957600080fd5b80639dba324114620001c7578063ac0425bc14620001e9578063bc45e0ae146200020b57600080fd5b80638da5cb5b11620000be5780638da5cb5b14620001635780639c683d1014620001835780639d4798e314620001a557600080fd5b8063030cb85e14620000f45780635491abea1462000132578063715018a6146200014957600080fd5b36620000ef57005b600080fd5b3480156200010157600080fd5b5060065462000116906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b620001166200014336600462002032565b620002bb565b3480156200015657600080fd5b506200016162000ee7565b005b3480156200017057600080fd5b506000546001600160a01b031662000116565b3480156200019057600080fd5b5060035462000116906001600160a01b031681565b348015620001b257600080fd5b5060055462000116906001600160a01b031681565b348015620001d457600080fd5b5060045462000116906001600160a01b031681565b348015620001f657600080fd5b5060085462000116906001600160a01b031681565b3480156200021857600080fd5b5060075462000116906001600160a01b031681565b3480156200023a57600080fd5b50620001616200024c36600462002143565b62000eff565b3480156200025f57600080fd5b5060025462000116906001600160a01b031681565b3480156200028157600080fd5b506200016162000293366004620021fd565b62000fce565b348015620002a657600080fd5b5060015462000116906001600160a01b031681565b600080600080600160009054906101000a90046001600160a01b03166001600160a01b03166311f022276040518163ffffffff1660e01b815260040160c060405180830381865afa15801562000315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033b91906200221d565b505093509350935050826001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000383573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a99190620022b1565b856040015114620004015760405162461bcd60e51b815260206004820152601960248201527f53495f4d41585f444154415f53495a455f4d49534d415443480000000000000060448201526064015b60405180910390fd5b816001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000440573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004669190620022b1565b856040015114620004ba5760405162461bcd60e51b815260206004820152601960248201527f53495f4d41585f444154415f53495a455f4d49534d41544348000000000000006044820152606401620003f8565b806001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200051f9190620022b1565b856040015114620005735760405162461bcd60e51b815260206004820152601860248201527f495f4d41585f444154415f53495a455f4d49534d4154434800000000000000006044820152606401620003f8565b6000806000600160009054906101000a90046001600160a01b03166001600160a01b03166376768ab96040518163ffffffff1660e01b815260040160c060405180830381865afa158015620005cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005f291906200221d565b505093509350935050826001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200063a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006609190620022b1565b886040015114620006b45760405162461bcd60e51b815260206004820152601960248201527f53495f4d41585f444154415f53495a455f4d49534d41544348000000000000006044820152606401620003f8565b816001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007199190620022b1565b8860400151146200076d5760405162461bcd60e51b815260206004820152601960248201527f53495f4d41585f444154415f53495a455f4d49534d41544348000000000000006044820152606401620003f8565b806001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015620007ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007d29190620022b1565b886040015114620008265760405162461bcd60e51b815260206004820152601860248201527f495f4d41585f444154415f53495a455f4d49534d4154434800000000000000006044820152606401620003f8565b50505050505060006040516200083c90620019ab565b604051809103906000f08015801562000859573d6000803e3d6000fd5b509050600083604051602001620008719190620025ef565b604051602081830303815290604052805190602001206040516200089590620019b9565b8190604051809103906000f5905080158015620008b6573d6000803e3d6000fd5b5060015460608601518651610120810151610240909101516040517f57d3a2000000000000000000000000000000000000000000000000000000000081529495506000946001600160a01b03909416936357d3a200936200091e9389938993600401620026b7565b60a0604051808303816000875af11580156200093e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096491906200273d565b90506000620009798385886000015162001064565b90506000620009918760000151608001518662001187565b6040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192509086169063f2fde38b90602401600060405180830381600087803b158015620009f257600080fd5b505af115801562000a07573d6000803e3d6000fd5b50508851306080918201528951604080516101208101825288516001600160a01b0390811682528983015181166020808401919091528a01518116828401528985015181166060808401919091528a015181169482019490945287841660a082015260048054851660c0830152600554851660e0830152600754851661010083015291517fd384644b000000000000000000000000000000000000000000000000000000008152938a16955063d384644b945062000ac893909101620027e3565b600060405180830381600087803b15801562000ae357600080fd5b505af115801562000af8573d6000803e3d6000fd5b5050505060005b8760c001515181101562000bd45783604001516001600160a01b0316636e7df3e78960c00151838151811062000b395762000b39620028c9565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b15801562000ba557600080fd5b505af115801562000bba573d6000803e3d6000fd5b50505050808062000bcb90620028df565b91505062000aff565b5060e08701516001600160a01b03161562000c6a5760408084015160e089015191517f1ff647900000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152911690631ff6479090602401600060405180830381600087803b15801562000c5057600080fd5b505af115801562000c65573d6000803e3d6000fd5b505050505b6020870151511562000d9757600087602001515167ffffffffffffffff81111562000c995762000c99620019d5565b60405190808252806020026020018201604052801562000cc3578160200160208202803683370190505b50905060005b88602001515181101562000d1357600182828151811062000cee5762000cee620028c9565b911515602092830291909101909101528062000d0a81620028df565b91505062000cc9565b5060208801516040517fa3ffb7720000000000000000000000000000000000000000000000000000000081526001600160a01b0387169163a3ffb7729162000d619190859060040162002926565b600060405180830381600087803b15801562000d7c57600080fd5b505af115801562000d91573d6000803e3d6000fd5b50505050505b6040517f13af40350000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301528516906313af403590602401600060405180830381600087803b15801562000df457600080fd5b505af115801562000e09573d6000803e3d6000fd5b5050505086608001511562000e315762000e31836020015188606001518960a00151620012b6565b606087810151602085810151608080880151888601516040808b01518b5160075483516001600160a01b03988916815295881698860198909852928616848301528a8616988401989098528c85169383019390935295831660a082015294821660c086015285821660e0860152918116610100850152905191811692908716917fd9bfd3bb3012f0caa103d1ba172692464d2de5c7b75877ce255c72147086a79d918190036101200190a3509195945050505050565b62000ef1620015c2565b62000efd60006200161e565b565b62000f09620015c2565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b038b8116919091179092556002805482168a8416179055600380548216898416179055600480548216888416179055600580548216878416179055600680548216868416179055600780548216858416179055600880549091169183169190911790556040517fc9d3947d22fa124aaec4c7e8c919f79016e2d7b48eee10568375d98b86460d1b90600090a15050505050505050565b62000fd8620015c2565b6001600160a01b038116620010565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620003f8565b62001061816200161e565b50565b60035460405160009182916001600160a01b039091169085906200108890620019c7565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f080158015620010cb573d6000803e3d6000fd5b509050806001600160a01b0316631a72d54c868560000151600260009054906101000a90046001600160a01b03168761014001518861016001518961018001518a602001518b608001518c61020001518d61010001516040518b63ffffffff1660e01b8152600401620011489a9998979695949392919062002983565b600060405180830381600087803b1580156200116357600080fd5b505af115801562001178573d6000803e3d6000fd5b509293505050505b9392505050565b6006546040805160208101825260008082529151919283926001600160a01b03909116918591620011b890620019c7565b620011c69392919062002a00565b604051809103906000f080158015620011e3573d6000803e3d6000fd5b5060408051600180825281830190925291925060009190602080830190803683370190505090508481600081518110620012215762001221620028c9565b6001600160a01b0392831660209182029290920101526040517f946d92040000000000000000000000000000000000000000000000000000000081529083169063946d92049062001279908590859060040162002a37565b600060405180830381600087803b1580156200129457600080fd5b505af1158015620012a9573d6000803e3d6000fd5b5093979650505050505050565b6001600160a01b03821662001487576008546040517facd7d02a0000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260248201849052600092169063acd7d02a90604401602060405180830381865afa15801562001331573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013579190620022b1565b6008546040517fd7c641e70000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015286811660248301526044820186905292935091169063d7c641e79083906064016000604051808303818588803b158015620013ca57600080fd5b505af1158015620013df573d6000803e3d6000fd5b5050604051600093503392504791508381818185875af1925050503d806000811462001428576040519150601f19603f3d011682016040523d82523d6000602084013e6200142d565b606091505b5050905080620014805760405162461bcd60e51b815260206004820152600d60248201527f526566756e64206661696c6564000000000000000000000000000000000000006044820152606401620003f8565b5050505050565b6008546040517facd7d02a0000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260248201849052600092169063acd7d02a90604401602060405180830381865afa158015620014f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015199190620022b1565b9050620015326001600160a01b03841633868462001686565b6008546040517fd7c641e70000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301528581166024830152604482018590529091169063d7c641e790606401600060405180830381600087803b158015620015a257600080fd5b505af1158015620015b7573d6000803e3d6000fd5b50505050505b505050565b6000546001600160a01b0316331462000efd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620003f8565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526200171090859062001716565b50505050565b60006200176d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620018029092919063ffffffff16565b805190915015620015bd57808060200190518101906200178e919062002a5b565b620015bd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620003f8565b60606200181384846000856200181b565b949350505050565b606082471015620018955760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620003f8565b6001600160a01b0385163b620018ee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620003f8565b600080866001600160a01b031685876040516200190c919062002a7b565b60006040518083038185875af1925050503d80600081146200194b576040519150601f19603f3d011682016040523d82523d6000602084013e62001950565b606091505b5091509150620019628282866200196d565b979650505050505050565b606083156200197e57508162001180565b8251156200198f5782518084602001fd5b8160405162461bcd60e51b8152600401620003f8919062002a99565b61080b8062002aaf83390190565b61140e80620032ba83390190565b610ed380620046c883390190565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171562001a115762001a11620019d5565b60405290565b6040805190810167ffffffffffffffff8111828210171562001a115762001a11620019d5565b604051610260810167ffffffffffffffff8111828210171562001a115762001a11620019d5565b604051610100810167ffffffffffffffff8111828210171562001a115762001a11620019d5565b604051601f8201601f1916810167ffffffffffffffff8111828210171562001ab75762001ab7620019d5565b604052919050565b803567ffffffffffffffff8116811462001ad857600080fd5b919050565b6001600160a01b03811681146200106157600080fd5b803562001ad88162001add565b600082601f83011262001b1257600080fd5b813567ffffffffffffffff81111562001b2f5762001b2f620019d5565b62001b446020601f19601f8401160162001a8b565b81815284602083860101111562001b5a57600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff82111562001b945762001b94620019d5565b5060051b60200190565b600082601f83011262001bb057600080fd5b8135602062001bc962001bc38362001b77565b62001a8b565b82815260059290921b8401810191818101908684111562001be957600080fd5b8286015b8481101562001c06578035835291830191830162001bed565b509695505050505050565b60006080828403121562001c2457600080fd5b6040516080810181811067ffffffffffffffff8211171562001c4a5762001c4a620019d5565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b600082601f83011262001c8d57600080fd5b62001c9762001a17565b80604084018581111562001caa57600080fd5b845b8181101562001ccf5762001cc08162001abf565b84526020938401930162001cac565b509095945050505050565b80356003811062001ad857600080fd5b600081830360c081121562001cfe57600080fd5b62001d08620019eb565b9150608081121562001d1957600080fd5b5062001d2462001a17565b83601f84011262001d3457600080fd5b62001d3e62001a17565b80604085018681111562001d5157600080fd5b855b8181101562001d6d57803584526020938401930162001d53565b5081845262001d7d878262001c7b565b6020850152505050815262001d956080830162001cda565b602082015260a0820135604082015292915050565b803560ff8116811462001ad857600080fd5b60006060828403121562001dcf57600080fd5b62001dd9620019eb565b905062001de68262001abf565b815262001df66020830162001abf565b602082015262001e096040830162001abf565b604082015292915050565b60006103a0828403121562001e2857600080fd5b62001e3262001a3d565b905062001e3f8262001abf565b815262001e4f6020830162001af3565b6020820152604082013560408201526060820135606082015262001e766080830162001af3565b608082015262001e8960a0830162001af3565b60a082015260c082013560c082015260e082013567ffffffffffffffff8082111562001eb457600080fd5b62001ec28583860162001b00565b60e08401526101009150818401358181111562001ede57600080fd5b62001eec8682870162001b9e565b8385015250505061012062001f048482850162001c11565b908201526101a0828101356101408301526101c0808401356101608401526101e08085013561018085015261020062001f408782880162001cea565b848601526102c08601358386015262001f5d6102e0870162001af3565b8286015262001f70610300870162001daa565b818601525050505062001f87610320830162001abf565b61022082015262001f9d83610340840162001dbc565b61024082015292915050565b600082601f83011262001fbb57600080fd5b8135602062001fce62001bc38362001b77565b82815260059290921b8401810191818101908684111562001fee57600080fd5b8286015b8481101562001c06578035620020088162001add565b835291830191830162001ff2565b80151581146200106157600080fd5b803562001ad88162002016565b6000602082840312156200204557600080fd5b813567ffffffffffffffff808211156200205e57600080fd5b9083019061010082860312156200207457600080fd5b6200207e62001a64565b8235828111156200208e57600080fd5b6200209c8782860162001e14565b825250602083013582811115620020b257600080fd5b620020c08782860162001fa9565b60208301525060408301356040820152620020de6060840162001af3565b6060820152620020f16080840162002025565b608082015260a083013560a082015260c0830135828111156200211357600080fd5b620021218782860162001fa9565b60c0830152506200213560e0840162001af3565b60e082015295945050505050565b600080600080600080600080610100898b0312156200216157600080fd5b88356200216e8162001add565b97506020890135620021808162001add565b96506040890135620021928162001add565b95506060890135620021a48162001add565b94506080890135620021b68162001add565b935060a0890135620021c88162001add565b925060c0890135620021da8162001add565b915060e0890135620021ec8162001add565b809150509295985092959890939650565b6000602082840312156200221057600080fd5b8135620011808162001add565b60008060008060008060c087890312156200223757600080fd5b8651620022448162001add565b6020880151909650620022578162001add565b60408801519095506200226a8162001add565b60608801519094506200227d8162001add565b6080880151909350620022908162001add565b60a0880151909250620022a38162001add565b809150509295509295509295565b600060208284031215620022c457600080fd5b5051919050565b60005b83811015620022e8578181015183820152602001620022ce565b50506000910152565b600081518084526200230b816020860160208601620022cb565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015620023515781518752958201959082019060010162002333565b509495945050505050565b600381106200237b57634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b6002811015620023a857825182526020928301929091019060010162002387565b505050602090810151906040840160005b6002811015620023e257835167ffffffffffffffff1682529282019290820190600101620023b9565b50508201519050620023f860808401826200235c565b506040015160a09190910152565b805167ffffffffffffffff16825260006103a060208301516200243460208601826001600160a01b03169052565b50604083015160408501526060830151606085015260808301516200246460808601826001600160a01b03169052565b5060a08301516200248060a08601826001600160a01b03169052565b5060c083015160c085015260e08301518160e0860152620024a482860182620022f1565b9150506101008084015185830382870152620024c183826200231f565b6101208681015180518983015260208101516101408a015260408101516101608a015260608101516101808a01529194509250905050506101408301516101a0818187015261016085015191506101c0828188015261018086015192506101e0838189015282870151935061020092506200253f838901856200237f565b908601516102c08801528501516001600160a01b03166102e087015284015160ff166103008601525061022083015167ffffffffffffffff908116610320860152610240840151805182166103408701526020810151821661036087015260408101519091166103808601525b509392505050565b600081518084526020808501945080840160005b83811015620023515781516001600160a01b031687529582019590820190600101620025c8565b60208152600082516101008060208501526200261061012085018362002406565b91506020850151601f1980868503016040870152620026308483620025b4565b935060408701516060870152606087015191506200265960808701836001600160a01b03169052565b608087015180151560a0880152915060a087015160c087015260c08701519150808685030160e087015250620026908382620025b4565b92505060e0850151620026ad828601826001600160a01b03169052565b5090949350505050565b6001600160a01b0386811682528581166020830152841660408201526101408101620027076060830185805182526020810151602083015260408101516040830152606081015160608301525050565b825167ffffffffffffffff90811660e0840152602084015181166101008401526040840151166101208301529695505050505050565b600060a082840312156200275057600080fd5b60405160a0810181811067ffffffffffffffff82111715620027765762002776620019d5565b6040528251620027868162001add565b81526020830151620027988162001add565b60208201526040830151620027ad8162001add565b60408201526060830151620027c28162001add565b60608201526080830151620027d78162001add565b60808201529392505050565b6000610140808352620027f98184018662002406565b9150506001600160a01b03835116602083015260208301516200282760408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516001600160a01b03811660808401525060808301516001600160a01b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160a01b03811660e08401525060e0830151610100620028ae818501836001600160a01b03169052565b8401516001600160a01b0381166101208501529050620025ac565b634e487b7160e01b600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200291f57634e487b7160e01b600052601160045260246000fd5b5060010190565b6040815260006200293b6040830185620025b4565b82810360208481019190915284518083528582019282019060005b818110156200297657845115158352938301939183019160010162002956565b5090979650505050505050565b60006101406001600160a01b03808e16845267ffffffffffffffff8d166020850152808c1660408501528a60608501528960808501528860a085015280881660c085015280871660e08501525060ff851661010084015280610120840152620029ef818401856200231f565b9d9c50505050505050505050505050565b60006001600160a01b0380861683528085166020840152506060604083015262002a2e6060830184620022f1565b95945050505050565b6001600160a01b0383168152604060208201526000620018136040830184620025b4565b60006020828403121562002a6e57600080fd5b8151620011808162002016565b6000825162002a8f818460208701620022cb565b9190910192915050565b602081526000620011806020830184620022f156fe608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61078d8061007e6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610579565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d161022e565b005b3480156100df57600080fd5b506100d16100ee36600461059d565b610242565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f366004610605565b6102c3565b34801561013057600080fd5b506100d161013f36600461059d565b61034b565b34801561015057600080fd5b506100d161015f366004610579565b61039a565b34801561017057600080fd5b506100a061017f366004610579565b610449565b6000806000836001600160a01b03166040516101c3907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d80600081146101fe576040519150601f19603f3d011682016040523d82523d6000602084013e610203565b606091505b50915091508161021257600080fd5b8080602001905181019061022691906106db565b949350505050565b610236610488565b61024060006104fc565b565b61024a610488565b6040517f8f2839700000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b1580156102a757600080fd5b505af11580156102bb573d6000803e3d6000fd5b505050505050565b6102cb610488565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef28690349061031490869086906004016106f8565b6000604051808303818588803b15801561032d57600080fd5b505af1158015610341573d6000803e3d6000fd5b5050505050505050565b610353610488565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690633659cfe69060240161028d565b6103a2610488565b6001600160a01b03811661043d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610446816104fc565b50565b6000806000836001600160a01b03166040516101c3907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000546001600160a01b03163314610240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610434565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461044657600080fd5b60006020828403121561058b57600080fd5b813561059681610564565b9392505050565b600080604083850312156105b057600080fd5b82356105bb81610564565b915060208301356105cb81610564565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561061a57600080fd5b833561062581610564565b9250602084013561063581610564565b9150604084013567ffffffffffffffff8082111561065257600080fd5b818601915086601f83011261066657600080fd5b813581811115610678576106786105d6565b604051601f8201601f19908116603f011681019083821181831017156106a0576106a06105d6565b816040528281528960208487010111156106b957600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156106ed57600080fd5b815161059681610564565b6001600160a01b038316815260006020604081840152835180604085015260005b8181101561073557858101830151858201606001528201610719565b506000606082860101526060601f19601f83011685010192505050939250505056fea2646970667358221220b5f17b9b80290312697ad0c26141bee28c1a1e448364e9044054c3ec2b5708bd64736f6c63430008110033608060405234801561001057600080fd5b506113ee806100206000396000f3fe6080604052600436106100225760003560e01c8063d384644b1461003957610031565b366100315761002f610059565b005b61002f610059565b34801561004557600080fd5b5061002f610054366004610d95565b61006b565b6100696100646101bd565b6102a1565b565b60006100756102ca565b6001600160a01b031614801561009b575060006100906102fd565b6001600160a01b0316145b80156100b7575060006100ac610325565b6001600160a01b0316145b156101b5576101b18160c0015183836040516024016100d792919061113d565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9e7e6aa70000000000000000000000000000000000000000000000000000000017905260e08601519087015191516001600160a01b0390921660248301529060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052608087015161034d565b5050565b6101b1610059565b600060043610156102155760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f46554e435f53494700000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000336102206102ca565b6001600160a01b03160361023b576102366102fd565b610243565b610243610325565b90506001600160a01b0381163b61029c5760405162461bcd60e51b815260206004820152601360248201527f5441524745545f4e4f545f434f4e545241435400000000000000000000000000604482015260640161020c565b919050565b3660008037600080366000845af43d6000803e8080156102c0573d6000f35b3d6000fd5b505050565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102ee565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6102ee565b61037860017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610461132b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103146103a6576103a661134c565b6103d160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61132b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc146103ff576103ff61134c565b61042a60017f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546e61132b565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d146104585761045861134c565b61046181610480565b61046d858560006104d7565b61047983836000610502565b5050505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104a96102ca565b604080516001600160a01b03928316815291841660208301520160405180910390a16104d48161050b565b50565b6104e0836105e3565b6000825111806104ed5750805b156102c5576104fc8383610623565b50505050565b6104e083610651565b6001600160a01b0381166105875760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161020c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6105ec81610691565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610648838360405180606001604052806027815260200161139260279139610735565b90505b92915050565b61065a8161082b565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b6001600160a01b0381163b61070e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161020c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105aa565b60606001600160a01b0384163b6107b45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161020c565b600080856001600160a01b0316856040516107cf9190611362565b600060405180830381855af49150503d806000811461080a576040519150601f19603f3d011682016040523d82523d6000602084013e61080f565b606091505b509150915061081f8282866108cf565b925050505b9392505050565b6001600160a01b0381163b6108a85760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e7472616374000000000000000000606482015260840161020c565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6105aa565b606083156108de575081610824565b8251156108ee5782518084602001fd5b8160405162461bcd60e51b815260040161020c919061137e565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561094157610941610908565b60405290565b6040805190810167ffffffffffffffff8111828210171561094157610941610908565b604051610120810167ffffffffffffffff8111828210171561094157610941610908565b604051610260810167ffffffffffffffff8111828210171561094157610941610908565b604051601f8201601f1916810167ffffffffffffffff811182821017156109db576109db610908565b604052919050565b803567ffffffffffffffff8116811461029c57600080fd5b80356001600160a01b038116811461029c57600080fd5b600082601f830112610a2357600080fd5b813567ffffffffffffffff811115610a3d57610a3d610908565b610a506020601f19601f840116016109b2565b818152846020838601011115610a6557600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610a9357600080fd5b8135602067ffffffffffffffff821115610aaf57610aaf610908565b8160051b610abe8282016109b2565b9283528481018201928281019087851115610ad857600080fd5b83870192505b84831015610af757823582529183019190830190610ade565b979650505050505050565b600060808284031215610b1457600080fd5b6040516080810181811067ffffffffffffffff82111715610b3757610b37610908565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b600082601f830112610b7957600080fd5b610b81610947565b806040840185811115610b9357600080fd5b845b81811015610bb457610ba6816109e3565b845260209384019301610b95565b509095945050505050565b80356003811061029c57600080fd5b600081830360c0811215610be157600080fd5b610be961091e565b91506080811215610bf957600080fd5b50610c02610947565b83601f840112610c1157600080fd5b610c19610947565b806040850186811115610c2b57600080fd5b855b81811015610c45578035845260209384019301610c2d565b50818452610c538782610b68565b60208501525050508152610c6960808301610bbf565b602082015260a0820135604082015292915050565b803560ff8116811461029c57600080fd5b600060608284031215610ca157600080fd5b610ca961091e565b9050610cb4826109e3565b8152610cc2602083016109e3565b6020820152610cd3604083016109e3565b604082015292915050565b60006101208284031215610cf157600080fd5b610cf961096a565b9050610d04826109fb565b8152610d12602083016109fb565b6020820152610d23604083016109fb565b6040820152610d34606083016109fb565b6060820152610d45608083016109fb565b6080820152610d5660a083016109fb565b60a0820152610d6760c083016109fb565b60c0820152610d7860e083016109fb565b60e0820152610100610d8b8184016109fb565b9082015292915050565b600080610140808486031215610daa57600080fd5b833567ffffffffffffffff80821115610dc257600080fd5b908501906103a08288031215610dd757600080fd5b610ddf61098e565b610de8836109e3565b8152610df6602084016109fb565b60208201526040830135604082015260608301356060820152610e1b608084016109fb565b6080820152610e2c60a084016109fb565b60a082015260c083013560c082015260e083013582811115610e4d57600080fd5b610e5989828601610a12565b60e0830152506101008084013583811115610e7357600080fd5b610e7f8a828701610a82565b8284015250506101209150610e9688838501610b02565b828201526101a0915081830135848201526101c09350838301356101608201526101e080840135610180830152610200610ed28a828701610bce565b848401526102c085013586840152610eed6102e086016109fb565b82840152610efe6103008601610c7e565b9083015250610f1061032084016109e3565b610220820152610f24886103408501610c8f565b61024082015280955050505050610f3e8460208501610cde565b90509250929050565b60005b83811015610f62578181015183820152602001610f4a565b50506000910152565b60008151808452610f83816020860160208601610f47565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015610fc757815187529582019590820190600101610fab565b509495945050505050565b60038110610ff057634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b600281101561101b578251825260209283019290910190600101610ffc565b505050602090810151906040840160005b600281101561105357835167ffffffffffffffff168252928201929082019060010161102c565b505082015190506110676080840182610fd2565b506040015160a09190910152565b6001600160a01b038082511683528060208301511660208401528060408301511660408401525060608101516110b660608401826001600160a01b03169052565b5060808101516110d160808401826001600160a01b03169052565b5060a08101516110ec60a08401826001600160a01b03169052565b5060c081015161110760c08401826001600160a01b03169052565b5060e081015161112260e08401826001600160a01b03169052565b50610100818101516001600160a01b038116848301526104fc565b600061014080835261115b818401865167ffffffffffffffff169052565b6020850151610160611177818601836001600160a01b03169052565b604087015191506101808281870152606088015192506101a08381880152608089015193506101c06111b3818901866001600160a01b03169052565b60a08a015194506101e06111d1818a01876001600160a01b03169052565b60c08b0151955061020086818b015260e08c015196506102206103a0818c01526111ff6104e08c0189610f6b565b97506101008d01516102407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08d8b0301818e015261123d8a83610f97565b99506101208f015191506112766102608e0183805182526020810151602083015260408101516040830152606081015160608301525050565b998e01516102e08d0152878e01516103008d0152868e01516103208d0152858e0151996112a76103408e018c610ff4565b948e01516104008d015250918c01516001600160a01b03166104208b01528b015160ff166104408a01528a015167ffffffffffffffff9081166104608a0152908a0151805182166104808a0152602081015182166104a08a015260408101519091166104c0890152945061131a92505050565b915061082490506020830184611075565b8181038181111561064b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b60008251611374818460208701610f47565b9190910192915050565b6020815260006106486020830184610f6b56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212200e28671cb63face36695a8336c251b0b5b2da4b5c045a4876b7b8ee5d825942c64736f6c63430008110033608060405260405162000ed338038062000ed3833981016040819052620000269162000487565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ba565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b6200023e1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000eac60279139620002f8565b9392505050565b60006200018060008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a81620003e160201b6200026a1760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620003de60201b620001fa1760201c565b60606001600160a01b0384163b620003625760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001f1565b600080856001600160a01b0316856040516200037f919062000567565b600060405180830381855af49150503d8060008114620003bc576040519150601f19603f3d011682016040523d82523d6000602084013e620003c1565b606091505b509092509050620003d4828286620003f0565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620004015750816200014f565b825115620004125782518084602001fd5b8160405162461bcd60e51b8152600401620001f1919062000585565b80516001600160a01b03811681146200044657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200047e57818101518382015260200162000464565b50506000910152565b6000806000606084860312156200049d57600080fd5b620004a8846200042e565b9250620004b8602085016200042e565b60408501519092506001600160401b0380821115620004d657600080fd5b818601915086601f830112620004eb57600080fd5b8151818111156200050057620005006200044b565b604051601f8201601f19908116603f011681019083821181831017156200052b576200052b6200044b565b816040528281528960208487010111156200054557600080fd5b6200055883602083016020880162000461565b80955050505050509250925092565b600082516200057b81846020870162000461565b9190910192915050565b6020815260008251806020840152620005a681604085016020870162000461565b601f01601f19169190910160400192915050565b6108c280620005ca6000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610736565b610128565b61006b6100a3366004610751565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610736565b6101fd565b34801561010557600080fd5b506100bd61021d565b610116610279565b610126610121610329565b610333565b565b610130610357565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061038a565b50565b61015a61010e565b61016d610357565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061038a915050565b505050565b6101bf61010e565b60006101d6610357565b6001600160a01b031633036101f2576101ed610329565b905090565b6101fa61010e565b90565b610205610357565b6001600160a01b0316330361015d5761015a816103b5565b6000610227610357565b6001600160a01b031633036101f2576101ed610357565b6060610263838360405180606001604052806027815260200161086660279139610409565b9392505050565b6001600160a01b03163b151590565b610281610357565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6104fd565b3660008037600080366000845af43d6000803e808015610352573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61039383610525565b6000825111806103a05750805b156101bf576103af838361023e565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103de610357565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610565565b60606001600160a01b0384163b6104885760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610320565b600080856001600160a01b0316856040516104a391906107f8565b600060405180830381855af49150503d80600081146104de576040519150601f19603f3d011682016040523d82523d6000602084013e6104e3565b606091505b50915091506104f382828661063d565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61037b565b61052e81610676565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105e15760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610320565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060831561064c575081610263565b82511561065c5782518084602001fd5b8160405162461bcd60e51b81526004016103209190610814565b6001600160a01b0381163b6106f35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610320565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610604565b80356001600160a01b038116811461073157600080fd5b919050565b60006020828403121561074857600080fd5b6102638261071a565b60008060006040848603121561076657600080fd5b61076f8461071a565b9250602084013567ffffffffffffffff8082111561078c57600080fd5b818601915086601f8301126107a057600080fd5b8135818111156107af57600080fd5b8760208285010111156107c157600080fd5b6020830194508093505050509250925092565b60005b838110156107ef5781810151838201526020016107d7565b50506000910152565b6000825161080a8184602087016107d4565b9190910192915050565b60208152600082518060208401526108338160408501602087016107d4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c1888b421836e473bfc3e72d153dc5c76569ce769e37cfa444506490e142daa564736f6c63430008110033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d486abd19f7f9d126c3e6864b45ef1e3c157eced78c79fb36ea9021e533e6acb64736f6c63430008110033", } // RollupCreatorABI is the input ABI used to generate the binding from. @@ -24676,7 +24676,7 @@ func (_RollupLib *RollupLibTransactorRaw) Transact(opts *bind.TransactOpts, meth // RollupProxyMetaData contains all meta data concerning the RollupProxy contract. var RollupProxyMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"UpgradedSecondary\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"stakeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseStake\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"loserStakeEscrow\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"miniStakeValues\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"sequencerInboxMaxTimeVariation\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBlockEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBigStepEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroSmallStepEdgeHeight\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"genesisAssertionState\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"genesisInboxCount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"anyTrustFastConfirmer\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"numBigStepLevel\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"challengeGracePeriodBlocks\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"threshold\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"replenishRateInBasis\",\"type\":\"uint64\"}],\"internalType\":\"structBufferConfig\",\"name\":\"bufferConfig\",\"type\":\"tuple\"}],\"internalType\":\"structConfig\",\"name\":\"config\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"contractIInboxBase\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIOutbox\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollupAdminLogic\",\"type\":\"address\"},{\"internalType\":\"contractIRollupUser\",\"name\":\"rollupUserLogic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validatorWalletCreator\",\"type\":\"address\"}],\"internalType\":\"structContractDependencies\",\"name\":\"connectedContracts\",\"type\":\"tuple\"}],\"name\":\"initializeProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x608060405234801561001057600080fd5b506113ee806100206000396000f3fe6080604052600436106100225760003560e01c8063d384644b1461003957610031565b366100315761002f610059565b005b61002f610059565b34801561004557600080fd5b5061002f610054366004610d95565b61006b565b6100696100646101bd565b6102a1565b565b60006100756102ca565b6001600160a01b031614801561009b575060006100906102fd565b6001600160a01b0316145b80156100b7575060006100ac610325565b6001600160a01b0316145b156101b5576101b18160c0015183836040516024016100d792919061113d565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9e7e6aa70000000000000000000000000000000000000000000000000000000017905260e08601519087015191516001600160a01b0390921660248301529060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052608087015161034d565b5050565b6101b1610059565b600060043610156102155760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f46554e435f53494700000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000336102206102ca565b6001600160a01b03160361023b576102366102fd565b610243565b610243610325565b90506001600160a01b0381163b61029c5760405162461bcd60e51b815260206004820152601360248201527f5441524745545f4e4f545f434f4e545241435400000000000000000000000000604482015260640161020c565b919050565b3660008037600080366000845af43d6000803e8080156102c0573d6000f35b3d6000fd5b505050565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102ee565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6102ee565b61037860017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610461132b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103146103a6576103a661134c565b6103d160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61132b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc146103ff576103ff61134c565b61042a60017f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546e61132b565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d146104585761045861134c565b61046181610480565b61046d858560006104d7565b61047983836000610502565b5050505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104a96102ca565b604080516001600160a01b03928316815291841660208301520160405180910390a16104d48161050b565b50565b6104e0836105e3565b6000825111806104ed5750805b156102c5576104fc8383610623565b50505050565b6104e083610651565b6001600160a01b0381166105875760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161020c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6105ec81610691565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610648838360405180606001604052806027815260200161139260279139610735565b90505b92915050565b61065a8161082b565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b6001600160a01b0381163b61070e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161020c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105aa565b60606001600160a01b0384163b6107b45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161020c565b600080856001600160a01b0316856040516107cf9190611362565b600060405180830381855af49150503d806000811461080a576040519150601f19603f3d011682016040523d82523d6000602084013e61080f565b606091505b509150915061081f8282866108cf565b925050505b9392505050565b6001600160a01b0381163b6108a85760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e7472616374000000000000000000606482015260840161020c565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6105aa565b606083156108de575081610824565b8251156108ee5782518084602001fd5b8160405162461bcd60e51b815260040161020c919061137e565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561094157610941610908565b60405290565b6040805190810167ffffffffffffffff8111828210171561094157610941610908565b604051610120810167ffffffffffffffff8111828210171561094157610941610908565b604051610260810167ffffffffffffffff8111828210171561094157610941610908565b604051601f8201601f1916810167ffffffffffffffff811182821017156109db576109db610908565b604052919050565b803567ffffffffffffffff8116811461029c57600080fd5b80356001600160a01b038116811461029c57600080fd5b600082601f830112610a2357600080fd5b813567ffffffffffffffff811115610a3d57610a3d610908565b610a506020601f19601f840116016109b2565b818152846020838601011115610a6557600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610a9357600080fd5b8135602067ffffffffffffffff821115610aaf57610aaf610908565b8160051b610abe8282016109b2565b9283528481018201928281019087851115610ad857600080fd5b83870192505b84831015610af757823582529183019190830190610ade565b979650505050505050565b600060808284031215610b1457600080fd5b6040516080810181811067ffffffffffffffff82111715610b3757610b37610908565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b600082601f830112610b7957600080fd5b610b81610947565b806040840185811115610b9357600080fd5b845b81811015610bb457610ba6816109e3565b845260209384019301610b95565b509095945050505050565b80356003811061029c57600080fd5b600081830360c0811215610be157600080fd5b610be961091e565b91506080811215610bf957600080fd5b50610c02610947565b83601f840112610c1157600080fd5b610c19610947565b806040850186811115610c2b57600080fd5b855b81811015610c45578035845260209384019301610c2d565b50818452610c538782610b68565b60208501525050508152610c6960808301610bbf565b602082015260a0820135604082015292915050565b803560ff8116811461029c57600080fd5b600060608284031215610ca157600080fd5b610ca961091e565b9050610cb4826109e3565b8152610cc2602083016109e3565b6020820152610cd3604083016109e3565b604082015292915050565b60006101208284031215610cf157600080fd5b610cf961096a565b9050610d04826109fb565b8152610d12602083016109fb565b6020820152610d23604083016109fb565b6040820152610d34606083016109fb565b6060820152610d45608083016109fb565b6080820152610d5660a083016109fb565b60a0820152610d6760c083016109fb565b60c0820152610d7860e083016109fb565b60e0820152610100610d8b8184016109fb565b9082015292915050565b600080610140808486031215610daa57600080fd5b833567ffffffffffffffff80821115610dc257600080fd5b908501906103a08288031215610dd757600080fd5b610ddf61098e565b610de8836109e3565b8152610df6602084016109fb565b60208201526040830135604082015260608301356060820152610e1b608084016109fb565b6080820152610e2c60a084016109fb565b60a082015260c083013560c082015260e083013582811115610e4d57600080fd5b610e5989828601610a12565b60e0830152506101008084013583811115610e7357600080fd5b610e7f8a828701610a82565b8284015250506101209150610e9688838501610b02565b828201526101a0915081830135848201526101c09350838301356101608201526101e080840135610180830152610200610ed28a828701610bce565b848401526102c085013586840152610eed6102e086016109fb565b82840152610efe6103008601610c7e565b9083015250610f1061032084016109e3565b610220820152610f24886103408501610c8f565b61024082015280955050505050610f3e8460208501610cde565b90509250929050565b60005b83811015610f62578181015183820152602001610f4a565b50506000910152565b60008151808452610f83816020860160208601610f47565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015610fc757815187529582019590820190600101610fab565b509495945050505050565b60038110610ff057634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b600281101561101b578251825260209283019290910190600101610ffc565b505050602090810151906040840160005b600281101561105357835167ffffffffffffffff168252928201929082019060010161102c565b505082015190506110676080840182610fd2565b506040015160a09190910152565b6001600160a01b038082511683528060208301511660208401528060408301511660408401525060608101516110b660608401826001600160a01b03169052565b5060808101516110d160808401826001600160a01b03169052565b5060a08101516110ec60a08401826001600160a01b03169052565b5060c081015161110760c08401826001600160a01b03169052565b5060e081015161112260e08401826001600160a01b03169052565b50610100818101516001600160a01b038116848301526104fc565b600061014080835261115b818401865167ffffffffffffffff169052565b6020850151610160611177818601836001600160a01b03169052565b604087015191506101808281870152606088015192506101a08381880152608089015193506101c06111b3818901866001600160a01b03169052565b60a08a015194506101e06111d1818a01876001600160a01b03169052565b60c08b0151955061020086818b015260e08c015196506102206103a0818c01526111ff6104e08c0189610f6b565b97506101008d01516102407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08d8b0301818e015261123d8a83610f97565b99506101208f015191506112766102608e0183805182526020810151602083015260408101516040830152606081015160608301525050565b998e01516102e08d0152878e01516103008d0152868e01516103208d0152858e0151996112a76103408e018c610ff4565b948e01516104008d015250918c01516001600160a01b03166104208b01528b015160ff166104408a01528a015167ffffffffffffffff9081166104608a0152908a0151805182166104808a0152602081015182166104a08a015260408101519091166104c0890152945061131a92505050565b915061082490506020830184611075565b8181038181111561064b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b60008251611374818460208701610f47565b9190910192915050565b6020815260006106486020830184610f6b56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207000f262e4a68ed485ac638f102eeaeb35ce8732f42c868f124f4b40522e1b9464736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b506113ee806100206000396000f3fe6080604052600436106100225760003560e01c8063d384644b1461003957610031565b366100315761002f610059565b005b61002f610059565b34801561004557600080fd5b5061002f610054366004610d95565b61006b565b6100696100646101bd565b6102a1565b565b60006100756102ca565b6001600160a01b031614801561009b575060006100906102fd565b6001600160a01b0316145b80156100b7575060006100ac610325565b6001600160a01b0316145b156101b5576101b18160c0015183836040516024016100d792919061113d565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9e7e6aa70000000000000000000000000000000000000000000000000000000017905260e08601519087015191516001600160a01b0390921660248301529060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052608087015161034d565b5050565b6101b1610059565b600060043610156102155760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f46554e435f53494700000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000336102206102ca565b6001600160a01b03160361023b576102366102fd565b610243565b610243610325565b90506001600160a01b0381163b61029c5760405162461bcd60e51b815260206004820152601360248201527f5441524745545f4e4f545f434f4e545241435400000000000000000000000000604482015260640161020c565b919050565b3660008037600080366000845af43d6000803e8080156102c0573d6000f35b3d6000fd5b505050565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102ee565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6102ee565b61037860017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610461132b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103146103a6576103a661134c565b6103d160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61132b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc146103ff576103ff61134c565b61042a60017f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546e61132b565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d146104585761045861134c565b61046181610480565b61046d858560006104d7565b61047983836000610502565b5050505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104a96102ca565b604080516001600160a01b03928316815291841660208301520160405180910390a16104d48161050b565b50565b6104e0836105e3565b6000825111806104ed5750805b156102c5576104fc8383610623565b50505050565b6104e083610651565b6001600160a01b0381166105875760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161020c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6105ec81610691565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610648838360405180606001604052806027815260200161139260279139610735565b90505b92915050565b61065a8161082b565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b6001600160a01b0381163b61070e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161020c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105aa565b60606001600160a01b0384163b6107b45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161020c565b600080856001600160a01b0316856040516107cf9190611362565b600060405180830381855af49150503d806000811461080a576040519150601f19603f3d011682016040523d82523d6000602084013e61080f565b606091505b509150915061081f8282866108cf565b925050505b9392505050565b6001600160a01b0381163b6108a85760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e7472616374000000000000000000606482015260840161020c565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6105aa565b606083156108de575081610824565b8251156108ee5782518084602001fd5b8160405162461bcd60e51b815260040161020c919061137e565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561094157610941610908565b60405290565b6040805190810167ffffffffffffffff8111828210171561094157610941610908565b604051610120810167ffffffffffffffff8111828210171561094157610941610908565b604051610260810167ffffffffffffffff8111828210171561094157610941610908565b604051601f8201601f1916810167ffffffffffffffff811182821017156109db576109db610908565b604052919050565b803567ffffffffffffffff8116811461029c57600080fd5b80356001600160a01b038116811461029c57600080fd5b600082601f830112610a2357600080fd5b813567ffffffffffffffff811115610a3d57610a3d610908565b610a506020601f19601f840116016109b2565b818152846020838601011115610a6557600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610a9357600080fd5b8135602067ffffffffffffffff821115610aaf57610aaf610908565b8160051b610abe8282016109b2565b9283528481018201928281019087851115610ad857600080fd5b83870192505b84831015610af757823582529183019190830190610ade565b979650505050505050565b600060808284031215610b1457600080fd5b6040516080810181811067ffffffffffffffff82111715610b3757610b37610908565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b600082601f830112610b7957600080fd5b610b81610947565b806040840185811115610b9357600080fd5b845b81811015610bb457610ba6816109e3565b845260209384019301610b95565b509095945050505050565b80356003811061029c57600080fd5b600081830360c0811215610be157600080fd5b610be961091e565b91506080811215610bf957600080fd5b50610c02610947565b83601f840112610c1157600080fd5b610c19610947565b806040850186811115610c2b57600080fd5b855b81811015610c45578035845260209384019301610c2d565b50818452610c538782610b68565b60208501525050508152610c6960808301610bbf565b602082015260a0820135604082015292915050565b803560ff8116811461029c57600080fd5b600060608284031215610ca157600080fd5b610ca961091e565b9050610cb4826109e3565b8152610cc2602083016109e3565b6020820152610cd3604083016109e3565b604082015292915050565b60006101208284031215610cf157600080fd5b610cf961096a565b9050610d04826109fb565b8152610d12602083016109fb565b6020820152610d23604083016109fb565b6040820152610d34606083016109fb565b6060820152610d45608083016109fb565b6080820152610d5660a083016109fb565b60a0820152610d6760c083016109fb565b60c0820152610d7860e083016109fb565b60e0820152610100610d8b8184016109fb565b9082015292915050565b600080610140808486031215610daa57600080fd5b833567ffffffffffffffff80821115610dc257600080fd5b908501906103a08288031215610dd757600080fd5b610ddf61098e565b610de8836109e3565b8152610df6602084016109fb565b60208201526040830135604082015260608301356060820152610e1b608084016109fb565b6080820152610e2c60a084016109fb565b60a082015260c083013560c082015260e083013582811115610e4d57600080fd5b610e5989828601610a12565b60e0830152506101008084013583811115610e7357600080fd5b610e7f8a828701610a82565b8284015250506101209150610e9688838501610b02565b828201526101a0915081830135848201526101c09350838301356101608201526101e080840135610180830152610200610ed28a828701610bce565b848401526102c085013586840152610eed6102e086016109fb565b82840152610efe6103008601610c7e565b9083015250610f1061032084016109e3565b610220820152610f24886103408501610c8f565b61024082015280955050505050610f3e8460208501610cde565b90509250929050565b60005b83811015610f62578181015183820152602001610f4a565b50506000910152565b60008151808452610f83816020860160208601610f47565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015610fc757815187529582019590820190600101610fab565b509495945050505050565b60038110610ff057634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b600281101561101b578251825260209283019290910190600101610ffc565b505050602090810151906040840160005b600281101561105357835167ffffffffffffffff168252928201929082019060010161102c565b505082015190506110676080840182610fd2565b506040015160a09190910152565b6001600160a01b038082511683528060208301511660208401528060408301511660408401525060608101516110b660608401826001600160a01b03169052565b5060808101516110d160808401826001600160a01b03169052565b5060a08101516110ec60a08401826001600160a01b03169052565b5060c081015161110760c08401826001600160a01b03169052565b5060e081015161112260e08401826001600160a01b03169052565b50610100818101516001600160a01b038116848301526104fc565b600061014080835261115b818401865167ffffffffffffffff169052565b6020850151610160611177818601836001600160a01b03169052565b604087015191506101808281870152606088015192506101a08381880152608089015193506101c06111b3818901866001600160a01b03169052565b60a08a015194506101e06111d1818a01876001600160a01b03169052565b60c08b0151955061020086818b015260e08c015196506102206103a0818c01526111ff6104e08c0189610f6b565b97506101008d01516102407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08d8b0301818e015261123d8a83610f97565b99506101208f015191506112766102608e0183805182526020810151602083015260408101516040830152606081015160608301525050565b998e01516102e08d0152878e01516103008d0152868e01516103208d0152858e0151996112a76103408e018c610ff4565b948e01516104008d015250918c01516001600160a01b03166104208b01528b015160ff166104408a01528a015167ffffffffffffffff9081166104608a0152908a0151805182166104808a0152602081015182166104a08a015260408101519091166104c0890152945061131a92505050565b915061082490506020830184611075565b8181038181111561064b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b60008251611374818460208701610f47565b9190910192915050565b6020815260006106486020830184610f6b56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212200e28671cb63face36695a8336c251b0b5b2da4b5c045a4876b7b8ee5d825942c64736f6c63430008110033", } // RollupProxyABI is the input ABI used to generate the binding from. @@ -25479,7 +25479,7 @@ func (_RollupProxy *RollupProxyFilterer) ParseUpgradedSecondary(log types.Log) ( // RollupReaderMetaData contains all meta data concerning the RollupReader contract. var RollupReaderMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractIOldRollup\",\"name\":\"_rollup\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nodeNum\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"parentNodeHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"nodeHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"executionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"}],\"internalType\":\"structExecutionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"}],\"internalType\":\"structExecutionState\",\"name\":\"afterState\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structIOldRollup.Assertion\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"afterInboxBatchAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"}],\"name\":\"NodeCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nodeNum\",\"type\":\"uint64\"}],\"name\":\"getNode\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"challengeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"confirmData\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"prevNum\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"deadlineBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"noChildConfirmedBeforeBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"stakerCount\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"childStakerCount\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"firstChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"latestChildNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAtBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"nodeHash\",\"type\":\"bytes32\"}],\"internalType\":\"structNode\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"getStaker\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"latestStakedNode\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"currentChallenge\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"internalType\":\"structOldStaker\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"stakerNum\",\"type\":\"uint64\"}],\"name\":\"getStakerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfirmed\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOldRollup\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakerCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWalletCreator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wasmModuleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a060405234801561001057600080fd5b50604051610be3380380610be383398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610b206100c3600039600081816101a5015281816101f6015281816102b601528181610333015281816104500152818161051b0152818161058a0152818161060e01526106a50152610b206000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063a23c44b111610076578063cb23bcb51161005b578063cb23bcb5146101a0578063dff69787146101c7578063facd743b146101cf57600080fd5b8063a23c44b11461012f578063bc45e0ae1461019857600080fd5b806365f7f80d146100a85780636ddd3744146100ce5780638ee1a126146100f957806392c8134c1461010f575b600080fd5b6100b06101f2565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6100e16100dc36600461072b565b61027b565b6040516001600160a01b0390911681526020016100c5565b61010161032f565b6040519081526020016100c5565b61012261011d36600461072b565b6103b3565b6040516100c5919061074f565b61014261013d366004610868565b6104bc565b6040516100c59190600060a08201905082518252602083015167ffffffffffffffff8082166020850152806040860151166040850152806060860151166060850152505060808301511515608083015292915050565b6100e1610586565b6100e17f000000000000000000000000000000000000000000000000000000000000000081565b6100b061060a565b6101e26101dd366004610868565b61066a565b60405190151581526020016100c5565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166365f7f80d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102769190610895565b905090565b6040517f6ddd374400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636ddd374490602401602060405180830381865afa158015610305573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032991906108b2565b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638ee1a1266040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027691906108cf565b6040805161018081018252600080825260208201819052818301819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082018190526101208201819052610140820181905261016082015290517f92c8134c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff831660048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906392c8134c9060240161018060405180830381865afa158015610498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610939565b6040805160a08101825260008082526020820181905281830181905260608201819052608082015290517fa23c44b10000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a23c44b19060240160a060405180830381865afa158015610562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610a1b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bc45e0ae6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027691906108b2565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dff697876040518163ffffffff1660e01b8152600401602060405180830381865afa158015610252573d6000803e3d6000fd5b6040517ffacd743b0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063facd743b90602401602060405180830381865afa1580156106ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610acf565b67ffffffffffffffff8116811461072857600080fd5b50565b60006020828403121561073d57600080fd5b813561074881610712565b9392505050565b600061018082019050825182526020830151602083015260408301516040830152606083015161078b606084018267ffffffffffffffff169052565b5060808301516107a7608084018267ffffffffffffffff169052565b5060a08301516107c360a084018267ffffffffffffffff169052565b5060c08301516107df60c084018267ffffffffffffffff169052565b5060e08301516107fb60e084018267ffffffffffffffff169052565b506101008381015167ffffffffffffffff81168483015250506101208381015167ffffffffffffffff81168483015250506101408381015167ffffffffffffffff811684830152505061016092830151919092015290565b6001600160a01b038116811461072857600080fd5b60006020828403121561087a57600080fd5b813561074881610853565b805161089081610712565b919050565b6000602082840312156108a757600080fd5b815161074881610712565b6000602082840312156108c457600080fd5b815161074881610853565b6000602082840312156108e157600080fd5b5051919050565b604051610180810167ffffffffffffffff81118282101715610933577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6000610180828403121561094c57600080fd5b6109546108e8565b82518152602083015160208201526040830151604082015261097860608401610885565b606082015261098960808401610885565b608082015261099a60a08401610885565b60a08201526109ab60c08401610885565b60c08201526109bc60e08401610885565b60e08201526101006109cf818501610885565b908201526101206109e1848201610885565b908201526101406109f3848201610885565b90820152610160928301519281019290925250919050565b8051801515811461089057600080fd5b600060a08284031215610a2d57600080fd5b60405160a0810181811067ffffffffffffffff82111715610a77577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052825181526020830151610a8c81610712565b60208201526040830151610a9f81610712565b60408201526060830151610ab281610712565b6060820152610ac360808401610a0b565b60808201529392505050565b600060208284031215610ae157600080fd5b61074882610a0b56fea2646970667358221220d06d5ba6ce0a81ed539987273ea566effee0be21b9af8a1a6e271b55b2638fc964736f6c63430008110033", + Bin: "0x60a060405234801561001057600080fd5b50604051610be3380380610be383398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610b206100c3600039600081816101a5015281816101f6015281816102b601528181610333015281816104500152818161051b0152818161058a0152818161060e01526106a50152610b206000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063a23c44b111610076578063cb23bcb51161005b578063cb23bcb5146101a0578063dff69787146101c7578063facd743b146101cf57600080fd5b8063a23c44b11461012f578063bc45e0ae1461019857600080fd5b806365f7f80d146100a85780636ddd3744146100ce5780638ee1a126146100f957806392c8134c1461010f575b600080fd5b6100b06101f2565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6100e16100dc36600461072b565b61027b565b6040516001600160a01b0390911681526020016100c5565b61010161032f565b6040519081526020016100c5565b61012261011d36600461072b565b6103b3565b6040516100c5919061074f565b61014261013d366004610868565b6104bc565b6040516100c59190600060a08201905082518252602083015167ffffffffffffffff8082166020850152806040860151166040850152806060860151166060850152505060808301511515608083015292915050565b6100e1610586565b6100e17f000000000000000000000000000000000000000000000000000000000000000081565b6100b061060a565b6101e26101dd366004610868565b61066a565b60405190151581526020016100c5565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166365f7f80d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102769190610895565b905090565b6040517f6ddd374400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636ddd374490602401602060405180830381865afa158015610305573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032991906108b2565b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638ee1a1266040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027691906108cf565b6040805161018081018252600080825260208201819052818301819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082018190526101208201819052610140820181905261016082015290517f92c8134c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff831660048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906392c8134c9060240161018060405180830381865afa158015610498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610939565b6040805160a08101825260008082526020820181905281830181905260608201819052608082015290517fa23c44b10000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a23c44b19060240160a060405180830381865afa158015610562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610a1b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bc45e0ae6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027691906108b2565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dff697876040518163ffffffff1660e01b8152600401602060405180830381865afa158015610252573d6000803e3d6000fd5b6040517ffacd743b0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063facd743b90602401602060405180830381865afa1580156106ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610acf565b67ffffffffffffffff8116811461072857600080fd5b50565b60006020828403121561073d57600080fd5b813561074881610712565b9392505050565b600061018082019050825182526020830151602083015260408301516040830152606083015161078b606084018267ffffffffffffffff169052565b5060808301516107a7608084018267ffffffffffffffff169052565b5060a08301516107c360a084018267ffffffffffffffff169052565b5060c08301516107df60c084018267ffffffffffffffff169052565b5060e08301516107fb60e084018267ffffffffffffffff169052565b506101008381015167ffffffffffffffff81168483015250506101208381015167ffffffffffffffff81168483015250506101408381015167ffffffffffffffff811684830152505061016092830151919092015290565b6001600160a01b038116811461072857600080fd5b60006020828403121561087a57600080fd5b813561074881610853565b805161089081610712565b919050565b6000602082840312156108a757600080fd5b815161074881610712565b6000602082840312156108c457600080fd5b815161074881610853565b6000602082840312156108e157600080fd5b5051919050565b604051610180810167ffffffffffffffff81118282101715610933577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6000610180828403121561094c57600080fd5b6109546108e8565b82518152602083015160208201526040830151604082015261097860608401610885565b606082015261098960808401610885565b608082015261099a60a08401610885565b60a08201526109ab60c08401610885565b60c08201526109bc60e08401610885565b60e08201526101006109cf818501610885565b908201526101206109e1848201610885565b908201526101406109f3848201610885565b90820152610160928301519281019290925250919050565b8051801515811461089057600080fd5b600060a08284031215610a2d57600080fd5b60405160a0810181811067ffffffffffffffff82111715610a77577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052825181526020830151610a8c81610712565b60208201526040830151610a9f81610712565b60408201526060830151610ab281610712565b6060820152610ac360808401610a0b565b60808201529392505050565b600060208284031215610ae157600080fd5b61074882610a0b56fea2646970667358221220d72dce3d7707d59230e5be10a8daf3e7c32c837063e73f888f079a4cc0773bfc64736f6c63430008110033", } // RollupReaderABI is the input ABI used to generate the binding from. @@ -26098,7 +26098,7 @@ func (_RollupReader *RollupReaderFilterer) ParseNodeCreated(log types.Log) (*Rol // RollupUserLogicMetaData contains all meta data concerning the RollupUserLogic contract. var RollupUserLogicMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sendRoot\",\"type\":\"bytes32\"}],\"name\":\"AssertionConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"afterInboxBatchAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"}],\"name\":\"AssertionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asserter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"challengedAssertion\",\"type\":\"uint64\"}],\"name\":\"RollupChallengeStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"machineHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"RollupInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"UpgradedSecondary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"withdrawalAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserStakeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserWithdrawableFundsUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_stakerMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"withdrawalAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"stakerAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedWithdrawalAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"addToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"amountStaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"anyTrustFastConfirmer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeGracePeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeManager\",\"outputs\":[{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"computeAssertionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"confirmState\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"winningEdgeId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"prevConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"confirmAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confirmPeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"confirmState\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"fastConfirmAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"fastConfirmNewAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisAssertionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertion\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"firstChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"secondChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAtBlock\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isFirstChild\",\"type\":\"bool\"},{\"internalType\":\"enumAssertionStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configHash\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionNode\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertionCreationBlockForLogLookup\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getFirstChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getSecondChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"getStaker\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"withdrawalAddress\",\"type\":\"address\"}],\"internalType\":\"structIRollupCore.Staker\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"stakerNum\",\"type\":\"uint64\"}],\"name\":\"getStakerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inbox\",\"outputs\":[{\"internalType\":\"contractIInboxBase\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_stakeToken\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isFirstChild\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isPending\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"isStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfirmed\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"latestStakedAssertion\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loserStakeEscrow\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumAssertionPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_withdrawalAddress\",\"type\":\"address\"}],\"name\":\"newStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_withdrawalAddress\",\"type\":\"address\"}],\"name\":\"newStakeOnNewAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"newStakeOnNewAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outbox\",\"outputs\":[{\"internalType\":\"contractIOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"target\",\"type\":\"uint256\"}],\"name\":\"reduceDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeWhitelistAfterFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeWhitelistAfterValidatorAfk\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"returnOldDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"stakerAddress\",\"type\":\"address\"}],\"name\":\"returnOldDepositFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDeploymentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupEventInbox\",\"outputs\":[{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"stakeOnNewAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakerCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalWithdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"validateAssertionHash\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"name\":\"validateConfig\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorAfkBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWalletCreator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWhitelistDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wasmModuleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawStakerFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"withdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"withdrawalAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60e0604052620000196200003a60201b62001f9e1760201c565b15156080523060a0524660c0523480156200003357600080fd5b5062000108565b60408051600481526024810182526020810180516001600160e01b03166302881c7960e11b1790529051600091829182916064916200007a9190620000d7565b600060405180830381855afa9150503d8060008114620000b7576040519150601f19603f3d011682016040523d82523d6000602084013e620000bc565b606091505b5091509150818015620000d0575080516020145b9250505090565b6000825160005b81811015620000fa5760208186018101518583015201620000de565b506000920191825250919050565b60805160a05160c051614b936200014d6000396000611c5201526000818161155601528181611cc80152611d5e015260008181610e1f01526130e60152614b936000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806365f7f80d116101e9578063bc45e0ae1161010f578063e6b3082c116100ad578063ef40a6701161007c578063ef40a6701461099c578063f065de3f146109c5578063facd743b146109d8578063fb0e722b146109eb57600080fd5b8063e6b3082c146108ca578063e78cea92146108e5578063e8bd4922146108f8578063ee35f3271461099457600080fd5b8063ce11e6ab116100e9578063ce11e6ab14610889578063dff697871461089c578063e51019a6146108a4578063e531d8c7146108b757600080fd5b8063bc45e0ae1461085b578063c2c2e68e1461086e578063c4d66de81461087657600080fd5b806384728cd0116101875780639a8a0592116101565780639a8a059214610724578063a23c44b11461072d578063aa38a6e714610833578063b7ab4db51461084657600080fd5b806384728cd0146106b757806388302884146106f35780638da5cb5b146107135780638ee1a1261461071b57600080fd5b80636ddd3744116101c35780636ddd37441461067f57806371ef232c146106925780637300201c1461069b57806376e7e23b146106ae57600080fd5b806365f7f80d1461065157806368129b1414610659578063685f5ecc1461066c57600080fd5b80633b86de19116102ce57806356bbc9e61161026c5780636096686d1161023b5780636096686d146105ed57806361373919146106005780636177fd18146106085780636420fb9f1461063e57600080fd5b806356bbc9e6146105b457806357ef4ab9146105c7578063588c7a16146105cf5780635c975abb146105e257600080fd5b806350f32f68116102a857806350f32f681461056e57806351ed6a301461058157806352d1902d1461059457806355840a581461059c57600080fd5b80633b86de19146105265780633be680ea1461053957806345e38b641461056557600080fd5b80631b1689e9116103465780632f30cabd116103155780632f30cabd146104cf57806330836228146104f857806333635fc21461050b578063353325e01461051e57600080fd5b80631b1689e9146104735780631e83d30f1461047c5780632abdd2301461048f5780632e7acfa6146104bb57600080fd5b80631171558511610382578063117155851461040157806312ab3d3b1461042d57806313c56ca71461044a57806318baaab91461046b57600080fd5b8063023a96fe146103a957806304972af9146103d957806310b98a35146103ee575b600080fd5b6069546103bc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6103ec6103e73660046140c6565b6109fe565b005b6103ec6103fc366004614105565b610a18565b61041461040f366004614163565b610dff565b60405167ffffffffffffffff90911681526020016103d0565b607b5461043a9060ff1681565b60405190151581526020016103d0565b61045d610458366004614163565b610e1b565b6040519081526020016103d0565b6103ec610f63565b61045d607a5481565b6103ec61048a366004614163565b611037565b61045d61049d366004614191565b6001600160a01b031660009081526077602052604090206001015490565b6066546104149067ffffffffffffffff1681565b61045d6104dd366004614191565b6001600160a01b031660009081526078602052604090205490565b61043a610506366004614163565b6110b2565b61045d6105193660046141ae565b6110ce565b61045d6110f3565b6103ec6105343660046141f8565b61112f565b6069546104149074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b61045d60715481565b6103ec61057c366004614225565b6114d0565b6070546103bc906001600160a01b031681565b61045d611549565b607b546103bc9061010090046001600160a01b031681565b6104146105c2366004614163565b61160e565b6103ec611631565b6103ec6105dd366004614191565b6116a0565b60335460ff1661043a565b6103ec6105fb366004614271565b611790565b61045d611803565b61043a610616366004614191565b6001600160a01b0316600090815260776020526040902060020154600160401b900460ff1690565b6103ec61064c3660046141f8565b611886565b60745461045d565b6103ec6106673660046142b1565b611a41565b6103ec61067a3660046142e1565b611ab8565b6103bc61068d366004614338565b611ad4565b61045d60795481565b6103ec6106a9366004614355565b611b0e565b61045d60675481565b6103bc6106c5366004614191565b6001600160a01b03908116600090815260776020526040902060020154690100000000000000000090041690565b610706610701366004614163565b611b1a565b6040516103d091906143c1565b6103bc611be6565b61045d60685481565b61045d60655481565b6107dc61073b366004614191565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160a01b03908116600090815260776020908152604091829020825160a081018452815481526001820154928101929092526002015467ffffffffffffffff81169282019290925260ff600160401b830416151560608201526901000000000000000000909104909116608082015290565b6040516103d09190600060a082019050825182526020830151602083015267ffffffffffffffff60408401511660408301526060830151151560608301526001600160a01b03608084015116608083015292915050565b606d546103bc906001600160a01b031681565b61084e611bf0565b6040516103d09190614422565b606e546103bc906001600160a01b031681565b6103ec611bfc565b6103ec610884366004614191565b611cbe565b606c546103bc906001600160a01b031681565b607654610414565b6103ec6108b236600461446f565b611e60565b61043a6108c5366004614163565b611ec7565b60665461041490600160401b900467ffffffffffffffff1681565b606b546103bc906001600160a01b031681565b610954610906366004614191565b60776020526000908152604090208054600182015460029092015490919067ffffffffffffffff811690600160401b810460ff1690690100000000000000000090046001600160a01b031685565b60408051958652602086019490945267ffffffffffffffff9092169284019290925290151560608301526001600160a01b0316608082015260a0016103d0565b6103bc611ef7565b61045d6109aa366004614191565b6001600160a01b031660009081526077602052604090205490565b606f546103bc906001600160a01b031681565b61043a6109e6366004614191565b611f7e565b606a546103bc906001600160a01b031681565b610a1481610a0b84612064565b600101546120c5565b5050565b33600081815260736020526040902054151580610a375750607b5460ff165b610a785760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b60448201526064015b60405180910390fd5b610a806121ca565b6000610a8b88612064565b90506000610a9888612064565b9050610aa88582600101546120c5565b610ab86080860160608701614338565b8254610ad59190600160801b900467ffffffffffffffff166144c3565b67ffffffffffffffff16431015610b2e5760405162461bcd60e51b815260206004820152600f60248201527f4245464f52455f444541444c494e4500000000000000000000000000000000006044820152606401610a6f565b6074548814610b7f5760405162461bcd60e51b815260206004820152601960248201527f505245565f4e4f545f4c41544553545f434f4e4649524d4544000000000000006044820152606401610a6f565b8054600160401b900467ffffffffffffffff1615610de8576000610ba96060870160408801614191565b6001600160a01b031663fda2892e886040518263ffffffff1660e01b8152600401610bd691815260200190565b6101e060405180830381865afa158015610bf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c18919061458d565b9050898160e0015114610c6d5760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f57494e4e4552000000000000000000000000000000000000000000006044820152606401610a6f565b60018161016001516001811115610c8657610c8661438d565b14610cd35760405162461bcd60e51b815260206004820152601260248201527f454447455f4e4f545f434f4e4649524d454400000000000000000000000000006044820152606401610a6f565b80610140015167ffffffffffffffff16600003610d325760405162461bcd60e51b815260206004820152601760248201527f5a45524f5f434f4e4649524d45445f41545f424c4f434b0000000000000000006044820152606401610a6f565b606954610140820151610d679174010000000000000000000000000000000000000000900467ffffffffffffffff16906144c3565b67ffffffffffffffff16431015610de65760405162461bcd60e51b815260206004820152602160248201527f4348414c4c454e47455f47524143455f504552494f445f4e4f545f504153534560448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401610a6f565b505b610df48989898761221f565b505050505050505050565b6000610e0a82612064565b5467ffffffffffffffff1692915050565b60007f000000000000000000000000000000000000000000000000000000000000000015610ea5576000828152607c602052604090205480610e9f5760405162461bcd60e51b815260206004820152600c60248201527f4e4f5f415353455254494f4e00000000000000000000000000000000000000006044820152606401610a6f565b92915050565b6000610eb083612064565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b8304811615156060830152929350610f4692909184916080840191600160c81b9004166002811115610f2257610f2261438d565b6002811115610f3357610f3361438d565b8152602001600182015481525050612436565b54600160801b900467ffffffffffffffff1692915050565b919050565b607b5460ff1615610fb65760405162461bcd60e51b815260206004820152601260248201527f57484954454c4953545f44495341424c454400000000000000000000000000006044820152606401610a6f565b610fbe61249b565b61100a5760405162461bcd60e51b815260206004820152601160248201527f56414c494441544f525f4e4f545f41464b0000000000000000000000000000006044820152606401610a6f565b607b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b336000818152607360205260409020541515806110565750607b5460ff165b6110925760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610a6f565b61109a6121ca565b6110a3336125cf565b6110ad33836126c0565b505050565b60006110bd82612064565b54600160c01b900460ff1692915050565b60006110e9846110e33686900386018661479a565b846127c1565b90505b9392505050565b60006110fd61406b565b6040805160608101825282815260016020820152600091810182905290806111268184816127c1565b94505050505090565b3360008181526073602052604090205415158061114e5750607b5460ff165b61118a5760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610a6f565b6111926121ca565b8115806111c3575060006111a583612064565b54600160c81b900460ff1660028111156111c1576111c161438d565b145b61120f5760405162461bcd60e51b815260206004820152601760248201527f45585045435445445f415353455254494f4e5f5345454e0000000000000000006044820152606401610a6f565b33600090815260776020526040902060020154600160401b900460ff166112655760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610a6f565b33600090815260776020526040902054606084013511156112c85760405162461bcd60e51b815260206004820152601260248201527f494e53554646494349454e545f5354414b4500000000000000000000000000006044820152606401610a6f565b60006112eb84356112e136879003870160e0880161479a565b60208701356127c1565b90506113646112f982612064565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b909104166002811115610f2257610f2261438d565b33600090815260776020526040902060010154818114806113985750600061138b82612064565b5467ffffffffffffffff16115b6113e45760405162461bcd60e51b815260206004820152601860248201527f5354414b45445f4f4e5f414e4f544845525f4252414e434800000000000000006044820152606401610a6f565b6000806113f2878588612805565b33600090815260776020526040902060010182905590925090508061148e57600061141c85612064565b5461143890600160801b900467ffffffffffffffff1643614801565b905060715481101561148c5760405162461bcd60e51b815260206004820152600a60248201527f54494d455f44454c5441000000000000000000000000000000000000000000006044820152606401610a6f565b505b61149782612064565b54600160c01b900460ff166114c757606f546070546114c7916001600160a01b03918216911660608a0135613189565b50505050505050565b6001600160a01b0381166115265760405162461bcd60e51b815260206004820152601860248201527f454d5054595f5749544844524157414c5f4144445245535300000000000000006044820152606401610a6f565b6115308482613232565b61153a838361112f565b6115438461330a565b50505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115e95760405162461bcd60e51b815260206004820152603b60248201527f555550534e6f745570677261646561626c653a206d757374206e6f742062652060448201527f63616c6c6564207468726f7567682064656c656761746563616c6c00000000006064820152608401610a6f565b507f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d90565b600061161982612064565b54600160401b900467ffffffffffffffff1692915050565b336000818152607360205260409020541515806116505750607b5460ff165b61168c5760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610a6f565b6116946121ca565b61169d33613322565b50565b6001600160a01b03811660009081526073602052604090205481901515806116ca5750607b5460ff165b6117065760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610a6f565b61170e6121ca565b6001600160a01b03828116600090815260776020526040902060020154690100000000000000000090041633146117875760405162461bcd60e51b815260206004820152601660248201527f4e4f545f5749544844524157414c5f41444452455353000000000000000000006044820152606401610a6f565b610a1482613322565b6117986121ca565b607b5461010090046001600160a01b031633146117f75760405162461bcd60e51b815260206004820152601260248201527f4e4f545f464153545f434f4e4649524d455200000000000000000000000000006044820152606401610a6f565b6115438484848461221f565b600061180d6121ca565b600061181833613334565b90506000811161186a5760405162461bcd60e51b815260206004820152601460248201527f4e4f5f46554e44535f544f5f57495448445241570000000000000000000000006044820152606401610a6f565b607054611881906001600160a01b03163383613189565b905090565b61188e6121ca565b806118db5760405162461bcd60e51b815260206004820152601760248201527f45585045435445445f415353455254494f4e5f484153480000000000000000006044820152606401610a6f565b60006118e682612064565b54600160c81b900460ff169050600061190c84356112e136879003870160e0880161479a565b905061191a6112f982612064565b600082600281111561192e5761192e61438d565b0361197e576000611940858386612805565b50905061194c81612064565b54600160c01b900460ff1661197c57606f5460705461197c916001600160a01b0391821691166060880135613189565b505b606b5461154390849083906101a08801906001600160a01b03166316bf557960016119b66119b1368d90038d0186614814565b6133b5565b6119c09190614830565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa158015611a1d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fb9190614851565b611a496121ca565b6001600160a01b038116611a9f5760405162461bcd60e51b815260206004820152601860248201527f454d5054595f5749544844524157414c5f4144445245535300000000000000006044820152606401610a6f565b611aa98282613232565b8115610a1457610a148261330a565b611ac06121ca565b611acb8383836133ca565b6110ad8161330a565b600060768267ffffffffffffffff1681548110611af357611af361486a565b6000918252602090912001546001600160a01b031692915050565b6110ad838383336114d0565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152611b5582612064565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b909104166002811115611bc057611bc061438d565b6002811115611bd157611bd161438d565b81526020016001820154815250509050919050565b6000611881613533565b60606118816072613566565b607b5460ff1615611c4f5760405162461bcd60e51b815260206004820152601260248201527f57484954454c4953545f44495341424c454400000000000000000000000000006044820152606401610a6f565b467f00000000000000000000000000000000000000000000000000000000000000000361100a5760405162461bcd60e51b815260206004820152601460248201527f434841494e5f49445f4e4f545f4348414e4745440000000000000000000000006044820152606401610a6f565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611d5c5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610a6f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611d8e613573565b6001600160a01b031614611e0a5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610a6f565b6001600160a01b03811661169d5760405162461bcd60e51b815260206004820152601060248201527f4e4545445f5354414b455f544f4b454e000000000000000000000000000000006044820152606401610a6f565b611e7982611e733686900386018661479a565b836127c1565b84146115435760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f415353455254494f4e5f48415348000000000000000000006044820152606401610a6f565b60006001611ed483612064565b54600160c81b900460ff166002811115611ef057611ef061438d565b1492915050565b606b54604080517fee35f32700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ee35f3279160048083019260209291908290030181865afa158015611f5a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118819190614880565b6001600160a01b0381166000908152607360205260408120541515610e9f565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f20000000000000000000000000000000000000000000000000000000017905290516000918291829160649161200a91906148c1565b600060405180830381855afa9150503d8060008114612045576040519150601f19603f3d011682016040523d82523d6000602084013e61204a565b606091505b509150915081801561205d575080516020145b9250505090565b6000816120b35760405162461bcd60e51b815260206004820152601b60248201527f415353455254494f4e5f49445f43414e4e4f545f42455f5a45524f00000000006044820152606401610a6f565b50600090815260756020526040902090565b61217c823560208401356120df6060860160408701614191565b6120ef6080870160608801614338565b6120ff60a0880160808901614338565b60408051602080820197909752808201959095526bffffffffffffffffffffffff19606094851b16938501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b81166074860152911b16607c8301528051606481840301815260849092019052805191012090565b8114610a145760405162461bcd60e51b815260206004820152601460248201527f434f4e4649475f484153485f4d49534d415443480000000000000000000000006044820152606401610a6f565b60335460ff161561221d5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a6f565b565b600061222a85612064565b905060018154600160c81b900460ff16600281111561224b5761224b61438d565b146122985760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f50454e44494e470000000000000000000000000000000000000000006044820152606401610a6f565b6122ab846110e33686900386018661479a565b85146122f95760405162461bcd60e51b815260206004820152600c60248201527f434f4e4649524d5f4441544100000000000000000000000000000000000000006044820152606401610a6f565b600061231261230d36869003860186614814565b61359b565b9050600061232d61232836879003870187614814565b6135a6565b606c546040517fa04cee6000000000000000000000000000000000000000000000000000000000815260048101839052602481018590529192506001600160a01b03169063a04cee6090604401600060405180830381600087803b15801561239457600080fd5b505af11580156123a8573d6000803e3d6000fd5b50505060748890555082547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff167902000000000000000000000000000000000000000000000000001783556040805183815260208101839052815189927ffc42829b29c259a7370ab56c8f69fce23b5f351a9ce151da453281993ec0090c928290030190a250505050505050565b60008160800151600281111561244e5761244e61438d565b0361169d5760405162461bcd60e51b815260206004820152601360248201527f415353455254494f4e5f4e4f545f4558495354000000000000000000000000006044820152606401610a6f565b6000806124af6124aa60745490565b612064565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b90910416600281111561251a5761251a61438d565b600281111561252b5761252b61438d565b815260019190910154602090910152606654909150600160401b900467ffffffffffffffff1660008190036125635760009250505090565b816040015167ffffffffffffffff166000036125825760009250505090565b815167ffffffffffffffff16156125b457815143906125ac90839067ffffffffffffffff166148dd565b109250505090565b4381836040015167ffffffffffffffff166125ac91906148dd565b6001600160a01b038116600090815260776020526040902060020154600160401b900460ff1661262e5760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610a6f565b6001600160a01b0381166000908152607760205260408120600101546074549091908214908061265d84612064565b5467ffffffffffffffff1611905081806126745750805b6115435760405162461bcd60e51b815260206004820152600c60248201527f5354414b455f41435449564500000000000000000000000000000000000000006044820152606401610a6f565b6001600160a01b0380831660009081526077602052604081206002810154815492939192690100000000000000000090910490911690808511156127465760405162461bcd60e51b815260206004820152601060248201527f544f4f5f4c4954544c455f5354414b45000000000000000000000000000000006044820152606401610a6f565b60006127528683614801565b868555905061276183826135b2565b826001600160a01b0316876001600160a01b03167fd957cf2340073335d256f72a9ef89cf1a43c31143341a6a53575ef33e987beb884896040516127af929190918252602082015260400190565b60405180910390a39695505050505050565b60006110e9846127d085613657565b604080516020808201949094528082019290925260608083018790528151808403909101815260809092019052805191012090565b60008061281860408601610a0b86612064565b600161282c610240870161022088016148f0565b600281111561283d5761283d61438d565b148061286b57506002612858610240870161022088016148f0565b60028111156128695761286961438d565b145b6128b75760405162461bcd60e51b815260206004820152601060248201527f4241445f41465445525f535441545553000000000000000000000000000000006044820152606401610a6f565b836128d986356128cf36899003890160e08a0161479a565b60208901356127c1565b146129265760405162461bcd60e51b815260206004820152601460248201527f494e56414c49445f4245464f52455f53544154450000000000000000000000006044820152606401610a6f565b600161293a610180870161016088016148f0565b600281111561294b5761294b61438d565b146129985760405162461bcd60e51b815260206004820152600f60248201527f4241445f505245565f53544154555300000000000000000000000000000000006044820152606401610a6f565b60006129a385612064565b90506000806101a0880160e08901826129bc8383613687565b1215612a0a5760405162461bcd60e51b815260206004820152600f60248201527f494e424f585f4241434b574152445300000000000000000000000000000000006044820152606401610a6f565b6000612a30612a1f60e08d0160c08e01614338565b849067ffffffffffffffff16613794565b90506000811315612a835760405162461bcd60e51b815260206004820152600d60248201527f494e424f585f544f4f5f464152000000000000000000000000000000000000006044820152606401610a6f565b6002612a976102408d016102208e016148f0565b6002811115612aa857612aa861438d565b14158015612ab65750600081125b15612b1857600196506000612acb8484613687565b13612b185760405162461bcd60e51b815260206004820152601360248201527f4f564552464c4f575f5354414e445354494c4c000000000000000000000000006044820152606401610a6f565b606b54604080517e84120c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916284120c9160048083019260209291908290030181865afa158015612b79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9d9190614851565b90506000612bab8583613794565b1315612bf95760405162461bcd60e51b815260206004820152600e60248201527f494e424f585f504153545f454e440000000000000000000000000000000000006044820152606401610a6f565b80612c0a60e08e0160c08f01614338565b67ffffffffffffffff161115612c625760405162461bcd60e51b815260206004820152601360248201527f494e424f585f4e4f545f504f50554c41544544000000000000000000000000006044820152606401610a6f565b6000612c766119b136879003870187614814565b67ffffffffffffffff169050818103612c9b57612c948260016148dd565b9650612c9f565b8196505b80600003612cef5760405162461bcd60e51b815260206004820152601160248201527f454d5054595f494e424f585f434f554e540000000000000000000000000000006044820152606401610a6f565b606b546001600160a01b03166316bf5579612d0b600184614801565b6040518263ffffffff1660e01b8152600401612d2991815260200190565b602060405180830381865afa158015612d46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6a9190614851565b95505050505050612d8a87896101a001803603810190611e73919061479a565b945085851480612d98575085155b612de45760405162461bcd60e51b815260206004820152601960248201527f554e45585045435445445f415353455254494f4e5f48415348000000000000006044820152606401610a6f565b6000612def86612064565b54600160c81b900460ff166002811115612e0b57612e0b61438d565b14612e585760405162461bcd60e51b815260206004820152600e60248201527f415353455254494f4e5f5345454e0000000000000000000000000000000000006044820152606401610a6f565b825460685460675460695460665460408051602080820196909652808201949094526bffffffffffffffffffffffff19606093841b16838501527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116607486015288831b16607c85015280516064818603018152608485018083528151918701919091206101448601835260009182905260a4860182905260c4860182905260e4860182905261010486018290526101249095018190528151928301825280835294820185905267ffffffffffffffff43811691830191909152909416159084015260a08301526001608083015250612f5684613823565b60008681526075602090815260409182902083518154928501519385015160608601511515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff928316600160801b02167fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff968316600160401b027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909616929093169190911793909317939093169290921717808255608083015183929182907fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16600160c81b83600281111561305e5761305e61438d565b021790555060a0820151816001015590505087867f901c3aee23cf4478825462caaab375c606ab83516060388344f06503407536308b8587606854606754606960009054906101000a90046001600160a01b0316606660009054906101000a900467ffffffffffffffff166040516130dc9796959493929190614983565b60405180910390a37f00000000000000000000000000000000000000000000000000000000000000001561317d5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061316d9190614851565b6000878152607c60205260409020555b50505050935093915050565b6040516001600160a01b0383166024820152604481018290526110ad9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138a7565b336000818152607360205260409020541515806132515750607b5460ff165b61328d5760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610a6f565b6132956121ca565b33600090815260776020526040902060020154600160401b900460ff16156132ff5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f5354414b45440000000000000000000000000000000000006044820152606401610a6f565b6110ad33848461398c565b60705461169d906001600160a01b0316333084613b08565b61332b816125cf565b61169d81613b59565b6001600160a01b0381166000908152607860205260408120805490829055607980548291908490613366908490614801565b909155505060408051828152600060208201526001600160a01b038516917fa740af14c56e4e04a617b1de1eb20de73270decbaaead14f142aabf3038e5ae2910160405180910390a292915050565b6020810151600090815b602002015192915050565b6001600160a01b03831660009081526073602052604090205483901515806133f45750607b5460ff165b6134305760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610a6f565b6134386121ca565b6001600160a01b038416600090815260776020526040902060020154600160401b900460ff166134975760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610a6f565b826001600160a01b03166134d3856001600160a01b03908116600090815260776020526040902060020154690100000000000000000090041690565b6001600160a01b0316146135295760405162461bcd60e51b815260206004820152601860248201527f57524f4e475f5749544844524157414c5f4144445245535300000000000000006044820152606401610a6f565b6115438483613be4565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b606060006110ec83613c72565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d613557565b8051600090816133bf565b805160009060016133bf565b6001600160a01b038216600090815260786020526040812054906135d683836148dd565b6001600160a01b03851660009081526078602052604081208290556079805492935085929091906136089084906148dd565b909155505060408051838152602081018390526001600160a01b038616917fa740af14c56e4e04a617b1de1eb20de73270decbaaead14f142aabf3038e5ae2910160405180910390a250505050565b60008160405160200161366a9190614a6f565b604051602081830303815290604052805190602001209050919050565b60008061369c6119b136869003860186614814565b905060006136b26119b136869003860186614814565b90508067ffffffffffffffff168267ffffffffffffffff1610156136dc5760001992505050610e9f565b8067ffffffffffffffff168267ffffffffffffffff16111561370357600192505050610e9f565b600061371c61371736889003880188614814565b613cce565b9050600061373261371736889003880188614814565b90508067ffffffffffffffff168267ffffffffffffffff16101561375e57600019945050505050610e9f565b8067ffffffffffffffff168267ffffffffffffffff161115613787576001945050505050610e9f565b6000945050505050610e9f565b6000806137a96119b136869003860186614814565b9050828167ffffffffffffffff1610156137c857600019915050610e9f565b828167ffffffffffffffff1611156137e4576001915050610e9f565b60006137f861371736879003870187614814565b67ffffffffffffffff161115613812576001915050610e9f565b6000915050610e9f565b5092915050565b805467ffffffffffffffff1660000361385357805467ffffffffffffffff19164367ffffffffffffffff16179055565b8054600160401b900467ffffffffffffffff1660000361169d5780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16600160401b4367ffffffffffffffff1602179055565b60006138fc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613cdd9092919063ffffffff16565b8051909150156110ad578080602001905181019061391a9190614af9565b6110ad5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610a6f565b6076805460018082019092557fb5732705f5241370a28908c2fe1303cb223f03b90d857fd0573f003f79fefed4810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038781169182179092556040805160a081018252878152607454602080830191825267ffffffffffffffff808816848601908152606085018a81528b89166080870181815260008a8152607787528981209851895596519c88019c909c5591516002909601805491519b51969093167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000090911617600160401b9a15159a909a02999099177fffffff0000000000000000000000000000000000000000ffffffffffffffffff166901000000000000000000949097169390930295909517909155815190815292830187905292939290917fd957cf2340073335d256f72a9ef89cf1a43c31143341a6a53575ef33e987beb891015b60405180910390a350505050565b6040516001600160a01b03808516602483015283166044820152606481018290526115439085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016131ce565b6001600160a01b03808216600090815260776020526040902060028101548154919269010000000000000000009091041690613b9582826135b2565b613b9e84613cec565b60408051828152600060208201526001600160a01b0380851692908716917fd957cf2340073335d256f72a9ef89cf1a43c31143341a6a53575ef33e987beb89101613afa565b6001600160a01b038216600090815260776020526040812080549091613c0a84836148dd565b808455600284015460408051858152602081018490529293506001600160a01b036901000000000000000000909204821692918816917fd957cf2340073335d256f72a9ef89cf1a43c31143341a6a53575ef33e987beb8910160405180910390a35050505050565b606081600001805480602002602001604051908101604052809291908181526020018280548015613cc257602002820191906000526020600020905b815481526020019060010190808311613cae575b50505050509050919050565b602081015160009060016133bf565b60606110e98484600085613eea565b6001600160a01b03811660009081526077602052604090206002810154600160401b900460ff16613d4c5760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610a6f565b60028101546076805467ffffffffffffffff90921691613d6e90600190614801565b81548110613d7e57613d7e61486a565b600091825260209091200154607680546001600160a01b039092169167ffffffffffffffff8416908110613db457613db461486a565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806077600060768467ffffffffffffffff1681548110613e0457613e0461486a565b6000918252602080832091909101546001600160a01b031683528201929092526040019020600201805467ffffffffffffffff191667ffffffffffffffff929092169190911790556076805480613e5d57613e5d614b14565b60008281526020808220830160001990810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690559092019092556001600160a01b039490941681526077909352505060408120818155600181019190915560020180547fffffff0000000000000000000000000000000000000000000000000000000000169055565b606082471015613f625760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610a6f565b6001600160a01b0385163b613fb95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a6f565b600080866001600160a01b03168587604051613fd591906148c1565b60006040518083038185875af1925050503d8060008114614012576040519150601f19603f3d011682016040523d82523d6000602084013e614017565b606091505b5091509150614027828286614032565b979650505050505050565b606083156140415750816110ec565b8251156140515782518084602001fd5b8160405162461bcd60e51b8152600401610a6f9190614b2a565b604051806040016040528061407e614090565b815260200161408b614090565b905290565b60405180604001604052806002906020820280368337509192915050565b600060a082840312156140c057600080fd5b50919050565b60008060c083850312156140d957600080fd5b823591506140ea84602085016140ae565b90509250929050565b600060c082840312156140c057600080fd5b6000806000806000806101e0878903121561411f57600080fd5b863595506020870135945061413788604089016140f3565b9350610100870135925061414f8861012089016140ae565b91506101c087013590509295509295509295565b60006020828403121561417557600080fd5b5035919050565b6001600160a01b038116811461169d57600080fd5b6000602082840312156141a357600080fd5b81356110ec8161417c565b600080600061010084860312156141c457600080fd5b833592506141d585602086016140f3565b915060e084013590509250925092565b600061026082840312156140c057600080fd5b600080610280838503121561420c57600080fd5b61421684846141e5565b94610260939093013593505050565b6000806000806102c0858703121561423c57600080fd5b8435935061424d86602087016141e5565b925061028085013591506102a08501356142668161417c565b939692955090935050565b600080600080610120858703121561428857600080fd5b84359350602085013592506142a086604087016140f3565b939692955092936101000135925050565b600080604083850312156142c457600080fd5b8235915060208301356142d68161417c565b809150509250929050565b6000806000606084860312156142f657600080fd5b83356143018161417c565b925060208401356143118161417c565b929592945050506040919091013590565b67ffffffffffffffff8116811461169d57600080fd5b60006020828403121561434a57600080fd5b81356110ec81614322565b60008060006102a0848603121561436b57600080fd5b8335925061437c85602086016141e5565b915061028084013590509250925092565b634e487b7160e01b600052602160045260246000fd5b6003811061169d57634e487b7160e01b600052602160045260246000fd5b600060c08201905067ffffffffffffffff80845116835280602085015116602084015280604085015116604084015250606083015115156060830152608083015161440b816143a3565b8060808401525060a083015160a083015292915050565b6020808252825182820181905260009190848201906040850190845b818110156144635783516001600160a01b03168352928401929184019160010161443e565b50909695505050505050565b600080600080610120858703121561448657600080fd5b8435935061449786602087016140f3565b939693955050505060e082013591610100013590565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff81811683821601908082111561381c5761381c6144ad565b634e487b7160e01b600052604160045260246000fd5b6040516101e0810167ffffffffffffffff8111828210171561451e5761451e6144e4565b60405290565b6040805190810167ffffffffffffffff8111828210171561451e5761451e6144e4565b8051610f5e8161417c565b8051610f5e81614322565b805160028110610f5e57600080fd5b805160ff81168114610f5e57600080fd5b80518015158114610f5e57600080fd5b60006101e082840312156145a057600080fd5b6145a86144fa565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e0820152610100614600818501614547565b90820152610120614612848201614552565b90820152610140614624848201614552565b9082015261016061463684820161455d565b9082015261018061464884820161456c565b908201526101a061465a84820161457d565b908201526101c061466c848201614552565b908201529392505050565b600082601f83011261468857600080fd5b6040516040810181811067ffffffffffffffff821117156146ab576146ab6144e4565b80604052508060408401858111156146c257600080fd5b845b818110156146e55780356146d781614322565b8352602092830192016146c4565b509195945050505050565b60006080828403121561470257600080fd5b6040516040810181811067ffffffffffffffff82111715614725576147256144e4565b604052905080601f8301841361473a57600080fd5b614742614524565b80604085018681111561475457600080fd5b855b8181101561476e578035845260209384019301614756565b5081845261477c8782614677565b60208501525050505092915050565b803560038110610f5e57600080fd5b600060c082840312156147ac57600080fd5b6040516060810181811067ffffffffffffffff821117156147cf576147cf6144e4565b6040526147dc84846146f0565b81526147ea6080840161478b565b602082015260a09290920135604083015250919050565b81810381811115610e9f57610e9f6144ad565b60006080828403121561482657600080fd5b6110ec83836146f0565b67ffffffffffffffff82811682821603908082111561381c5761381c6144ad565b60006020828403121561486357600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561489257600080fd5b81516110ec8161417c565b60005b838110156148b85781810151838201526020016148a0565b50506000910152565b600082516148d381846020870161489d565b9190910192915050565b80820180821115610e9f57610e9f6144ad565b60006020828403121561490257600080fd5b6110ec8261478b565b614914816143a3565b9052565b6040818337604082016040820160005b600281101561495b57813561493c81614322565b67ffffffffffffffff1683526020928301929190910190600101614928565b50505061496a6080820161478b565b614973816143a3565b608083015260a090810135910152565b6000610320820190508835825260208901356020830152604089013560408301526060890135606083015260808901356149bc8161417c565b6001600160a01b0316608083015260a08901356149d881614322565b67ffffffffffffffff90811660a084015260c08a0135906149f882614322565b1660c0830152614a0e60e0808401908b01614918565b6101a0614a1f818401828c01614918565b508761026083015286610280830152856102a0830152846102c0830152614a526102e08301856001600160a01b03169052565b67ffffffffffffffff831661030083015298975050505050505050565b8151805160c0830191908360005b6002811015614a9c578251825260209283019290910190600101614a7d565b505050602090810151906040840160005b6002811015614ad457835167ffffffffffffffff1682529282019290820190600101614aad565b50508401519050614ae8608084018261490b565b50604083015160a083015292915050565b600060208284031215614b0b57600080fd5b6110ec8261457d565b634e487b7160e01b600052603160045260246000fd5b6020815260008251806020840152614b4981604085016020870161489d565b601f01601f1916919091016040019291505056fea264697066735822122023254649d5d4645e21f26b33f9e63d85441a80bc7c03a0ac8d7b5f231fad719764736f6c63430008110033", + Bin: "0x60e0604052620000196200003a60201b62001f9e1760201c565b15156080523060a0524660c0523480156200003357600080fd5b5062000108565b60408051600481526024810182526020810180516001600160e01b03166302881c7960e11b1790529051600091829182916064916200007a9190620000d7565b600060405180830381855afa9150503d8060008114620000b7576040519150601f19603f3d011682016040523d82523d6000602084013e620000bc565b606091505b5091509150818015620000d0575080516020145b9250505090565b6000825160005b81811015620000fa5760208186018101518583015201620000de565b506000920191825250919050565b60805160a05160c051614b936200014d6000396000611c5201526000818161155601528181611cc80152611d5e015260008181610e1f01526130e60152614b936000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806365f7f80d116101e9578063bc45e0ae1161010f578063e6b3082c116100ad578063ef40a6701161007c578063ef40a6701461099c578063f065de3f146109c5578063facd743b146109d8578063fb0e722b146109eb57600080fd5b8063e6b3082c146108ca578063e78cea92146108e5578063e8bd4922146108f8578063ee35f3271461099457600080fd5b8063ce11e6ab116100e9578063ce11e6ab14610889578063dff697871461089c578063e51019a6146108a4578063e531d8c7146108b757600080fd5b8063bc45e0ae1461085b578063c2c2e68e1461086e578063c4d66de81461087657600080fd5b806384728cd0116101875780639a8a0592116101565780639a8a059214610724578063a23c44b11461072d578063aa38a6e714610833578063b7ab4db51461084657600080fd5b806384728cd0146106b757806388302884146106f35780638da5cb5b146107135780638ee1a1261461071b57600080fd5b80636ddd3744116101c35780636ddd37441461067f57806371ef232c146106925780637300201c1461069b57806376e7e23b146106ae57600080fd5b806365f7f80d1461065157806368129b1414610659578063685f5ecc1461066c57600080fd5b80633b86de19116102ce57806356bbc9e61161026c5780636096686d1161023b5780636096686d146105ed57806361373919146106005780636177fd18146106085780636420fb9f1461063e57600080fd5b806356bbc9e6146105b457806357ef4ab9146105c7578063588c7a16146105cf5780635c975abb146105e257600080fd5b806350f32f68116102a857806350f32f681461056e57806351ed6a301461058157806352d1902d1461059457806355840a581461059c57600080fd5b80633b86de19146105265780633be680ea1461053957806345e38b641461056557600080fd5b80631b1689e9116103465780632f30cabd116103155780632f30cabd146104cf57806330836228146104f857806333635fc21461050b578063353325e01461051e57600080fd5b80631b1689e9146104735780631e83d30f1461047c5780632abdd2301461048f5780632e7acfa6146104bb57600080fd5b80631171558511610382578063117155851461040157806312ab3d3b1461042d57806313c56ca71461044a57806318baaab91461046b57600080fd5b8063023a96fe146103a957806304972af9146103d957806310b98a35146103ee575b600080fd5b6069546103bc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6103ec6103e73660046140c6565b6109fe565b005b6103ec6103fc366004614105565b610a18565b61041461040f366004614163565b610dff565b60405167ffffffffffffffff90911681526020016103d0565b607b5461043a9060ff1681565b60405190151581526020016103d0565b61045d610458366004614163565b610e1b565b6040519081526020016103d0565b6103ec610f63565b61045d607a5481565b6103ec61048a366004614163565b611037565b61045d61049d366004614191565b6001600160a01b031660009081526077602052604090206001015490565b6066546104149067ffffffffffffffff1681565b61045d6104dd366004614191565b6001600160a01b031660009081526078602052604090205490565b61043a610506366004614163565b6110b2565b61045d6105193660046141ae565b6110ce565b61045d6110f3565b6103ec6105343660046141f8565b61112f565b6069546104149074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b61045d60715481565b6103ec61057c366004614225565b6114d0565b6070546103bc906001600160a01b031681565b61045d611549565b607b546103bc9061010090046001600160a01b031681565b6104146105c2366004614163565b61160e565b6103ec611631565b6103ec6105dd366004614191565b6116a0565b60335460ff1661043a565b6103ec6105fb366004614271565b611790565b61045d611803565b61043a610616366004614191565b6001600160a01b0316600090815260776020526040902060020154600160401b900460ff1690565b6103ec61064c3660046141f8565b611886565b60745461045d565b6103ec6106673660046142b1565b611a41565b6103ec61067a3660046142e1565b611ab8565b6103bc61068d366004614338565b611ad4565b61045d60795481565b6103ec6106a9366004614355565b611b0e565b61045d60675481565b6103bc6106c5366004614191565b6001600160a01b03908116600090815260776020526040902060020154690100000000000000000090041690565b610706610701366004614163565b611b1a565b6040516103d091906143c1565b6103bc611be6565b61045d60685481565b61045d60655481565b6107dc61073b366004614191565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160a01b03908116600090815260776020908152604091829020825160a081018452815481526001820154928101929092526002015467ffffffffffffffff81169282019290925260ff600160401b830416151560608201526901000000000000000000909104909116608082015290565b6040516103d09190600060a082019050825182526020830151602083015267ffffffffffffffff60408401511660408301526060830151151560608301526001600160a01b03608084015116608083015292915050565b606d546103bc906001600160a01b031681565b61084e611bf0565b6040516103d09190614422565b606e546103bc906001600160a01b031681565b6103ec611bfc565b6103ec610884366004614191565b611cbe565b606c546103bc906001600160a01b031681565b607654610414565b6103ec6108b236600461446f565b611e60565b61043a6108c5366004614163565b611ec7565b60665461041490600160401b900467ffffffffffffffff1681565b606b546103bc906001600160a01b031681565b610954610906366004614191565b60776020526000908152604090208054600182015460029092015490919067ffffffffffffffff811690600160401b810460ff1690690100000000000000000090046001600160a01b031685565b60408051958652602086019490945267ffffffffffffffff9092169284019290925290151560608301526001600160a01b0316608082015260a0016103d0565b6103bc611ef7565b61045d6109aa366004614191565b6001600160a01b031660009081526077602052604090205490565b606f546103bc906001600160a01b031681565b61043a6109e6366004614191565b611f7e565b606a546103bc906001600160a01b031681565b610a1481610a0b84612064565b600101546120c5565b5050565b33600081815260736020526040902054151580610a375750607b5460ff165b610a785760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b60448201526064015b60405180910390fd5b610a806121ca565b6000610a8b88612064565b90506000610a9888612064565b9050610aa88582600101546120c5565b610ab86080860160608701614338565b8254610ad59190600160801b900467ffffffffffffffff166144c3565b67ffffffffffffffff16431015610b2e5760405162461bcd60e51b815260206004820152600f60248201527f4245464f52455f444541444c494e4500000000000000000000000000000000006044820152606401610a6f565b6074548814610b7f5760405162461bcd60e51b815260206004820152601960248201527f505245565f4e4f545f4c41544553545f434f4e4649524d4544000000000000006044820152606401610a6f565b8054600160401b900467ffffffffffffffff1615610de8576000610ba96060870160408801614191565b6001600160a01b031663fda2892e886040518263ffffffff1660e01b8152600401610bd691815260200190565b6101e060405180830381865afa158015610bf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c18919061458d565b9050898160e0015114610c6d5760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f57494e4e4552000000000000000000000000000000000000000000006044820152606401610a6f565b60018161016001516001811115610c8657610c8661438d565b14610cd35760405162461bcd60e51b815260206004820152601260248201527f454447455f4e4f545f434f4e4649524d454400000000000000000000000000006044820152606401610a6f565b80610140015167ffffffffffffffff16600003610d325760405162461bcd60e51b815260206004820152601760248201527f5a45524f5f434f4e4649524d45445f41545f424c4f434b0000000000000000006044820152606401610a6f565b606954610140820151610d679174010000000000000000000000000000000000000000900467ffffffffffffffff16906144c3565b67ffffffffffffffff16431015610de65760405162461bcd60e51b815260206004820152602160248201527f4348414c4c454e47455f47524143455f504552494f445f4e4f545f504153534560448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401610a6f565b505b610df48989898761221f565b505050505050505050565b6000610e0a82612064565b5467ffffffffffffffff1692915050565b60007f000000000000000000000000000000000000000000000000000000000000000015610ea5576000828152607c602052604090205480610e9f5760405162461bcd60e51b815260206004820152600c60248201527f4e4f5f415353455254494f4e00000000000000000000000000000000000000006044820152606401610a6f565b92915050565b6000610eb083612064565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b8304811615156060830152929350610f4692909184916080840191600160c81b9004166002811115610f2257610f2261438d565b6002811115610f3357610f3361438d565b8152602001600182015481525050612436565b54600160801b900467ffffffffffffffff1692915050565b919050565b607b5460ff1615610fb65760405162461bcd60e51b815260206004820152601260248201527f57484954454c4953545f44495341424c454400000000000000000000000000006044820152606401610a6f565b610fbe61249b565b61100a5760405162461bcd60e51b815260206004820152601160248201527f56414c494441544f525f4e4f545f41464b0000000000000000000000000000006044820152606401610a6f565b607b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b336000818152607360205260409020541515806110565750607b5460ff165b6110925760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610a6f565b61109a6121ca565b6110a3336125cf565b6110ad33836126c0565b505050565b60006110bd82612064565b54600160c01b900460ff1692915050565b60006110e9846110e33686900386018661479a565b846127c1565b90505b9392505050565b60006110fd61406b565b6040805160608101825282815260016020820152600091810182905290806111268184816127c1565b94505050505090565b3360008181526073602052604090205415158061114e5750607b5460ff165b61118a5760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610a6f565b6111926121ca565b8115806111c3575060006111a583612064565b54600160c81b900460ff1660028111156111c1576111c161438d565b145b61120f5760405162461bcd60e51b815260206004820152601760248201527f45585045435445445f415353455254494f4e5f5345454e0000000000000000006044820152606401610a6f565b33600090815260776020526040902060020154600160401b900460ff166112655760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610a6f565b33600090815260776020526040902054606084013511156112c85760405162461bcd60e51b815260206004820152601260248201527f494e53554646494349454e545f5354414b4500000000000000000000000000006044820152606401610a6f565b60006112eb84356112e136879003870160e0880161479a565b60208701356127c1565b90506113646112f982612064565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b909104166002811115610f2257610f2261438d565b33600090815260776020526040902060010154818114806113985750600061138b82612064565b5467ffffffffffffffff16115b6113e45760405162461bcd60e51b815260206004820152601860248201527f5354414b45445f4f4e5f414e4f544845525f4252414e434800000000000000006044820152606401610a6f565b6000806113f2878588612805565b33600090815260776020526040902060010182905590925090508061148e57600061141c85612064565b5461143890600160801b900467ffffffffffffffff1643614801565b905060715481101561148c5760405162461bcd60e51b815260206004820152600a60248201527f54494d455f44454c5441000000000000000000000000000000000000000000006044820152606401610a6f565b505b61149782612064565b54600160c01b900460ff166114c757606f546070546114c7916001600160a01b03918216911660608a0135613189565b50505050505050565b6001600160a01b0381166115265760405162461bcd60e51b815260206004820152601860248201527f454d5054595f5749544844524157414c5f4144445245535300000000000000006044820152606401610a6f565b6115308482613232565b61153a838361112f565b6115438461330a565b50505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115e95760405162461bcd60e51b815260206004820152603b60248201527f555550534e6f745570677261646561626c653a206d757374206e6f742062652060448201527f63616c6c6564207468726f7567682064656c656761746563616c6c00000000006064820152608401610a6f565b507f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d90565b600061161982612064565b54600160401b900467ffffffffffffffff1692915050565b336000818152607360205260409020541515806116505750607b5460ff165b61168c5760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610a6f565b6116946121ca565b61169d33613322565b50565b6001600160a01b03811660009081526073602052604090205481901515806116ca5750607b5460ff165b6117065760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610a6f565b61170e6121ca565b6001600160a01b03828116600090815260776020526040902060020154690100000000000000000090041633146117875760405162461bcd60e51b815260206004820152601660248201527f4e4f545f5749544844524157414c5f41444452455353000000000000000000006044820152606401610a6f565b610a1482613322565b6117986121ca565b607b5461010090046001600160a01b031633146117f75760405162461bcd60e51b815260206004820152601260248201527f4e4f545f464153545f434f4e4649524d455200000000000000000000000000006044820152606401610a6f565b6115438484848461221f565b600061180d6121ca565b600061181833613334565b90506000811161186a5760405162461bcd60e51b815260206004820152601460248201527f4e4f5f46554e44535f544f5f57495448445241570000000000000000000000006044820152606401610a6f565b607054611881906001600160a01b03163383613189565b905090565b61188e6121ca565b806118db5760405162461bcd60e51b815260206004820152601760248201527f45585045435445445f415353455254494f4e5f484153480000000000000000006044820152606401610a6f565b60006118e682612064565b54600160c81b900460ff169050600061190c84356112e136879003870160e0880161479a565b905061191a6112f982612064565b600082600281111561192e5761192e61438d565b0361197e576000611940858386612805565b50905061194c81612064565b54600160c01b900460ff1661197c57606f5460705461197c916001600160a01b0391821691166060880135613189565b505b606b5461154390849083906101a08801906001600160a01b03166316bf557960016119b66119b1368d90038d0186614814565b6133b5565b6119c09190614830565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa158015611a1d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fb9190614851565b611a496121ca565b6001600160a01b038116611a9f5760405162461bcd60e51b815260206004820152601860248201527f454d5054595f5749544844524157414c5f4144445245535300000000000000006044820152606401610a6f565b611aa98282613232565b8115610a1457610a148261330a565b611ac06121ca565b611acb8383836133ca565b6110ad8161330a565b600060768267ffffffffffffffff1681548110611af357611af361486a565b6000918252602090912001546001600160a01b031692915050565b6110ad838383336114d0565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152611b5582612064565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b909104166002811115611bc057611bc061438d565b6002811115611bd157611bd161438d565b81526020016001820154815250509050919050565b6000611881613533565b60606118816072613566565b607b5460ff1615611c4f5760405162461bcd60e51b815260206004820152601260248201527f57484954454c4953545f44495341424c454400000000000000000000000000006044820152606401610a6f565b467f00000000000000000000000000000000000000000000000000000000000000000361100a5760405162461bcd60e51b815260206004820152601460248201527f434841494e5f49445f4e4f545f4348414e4745440000000000000000000000006044820152606401610a6f565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611d5c5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610a6f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611d8e613573565b6001600160a01b031614611e0a5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610a6f565b6001600160a01b03811661169d5760405162461bcd60e51b815260206004820152601060248201527f4e4545445f5354414b455f544f4b454e000000000000000000000000000000006044820152606401610a6f565b611e7982611e733686900386018661479a565b836127c1565b84146115435760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f415353455254494f4e5f48415348000000000000000000006044820152606401610a6f565b60006001611ed483612064565b54600160c81b900460ff166002811115611ef057611ef061438d565b1492915050565b606b54604080517fee35f32700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ee35f3279160048083019260209291908290030181865afa158015611f5a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118819190614880565b6001600160a01b0381166000908152607360205260408120541515610e9f565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f20000000000000000000000000000000000000000000000000000000017905290516000918291829160649161200a91906148c1565b600060405180830381855afa9150503d8060008114612045576040519150601f19603f3d011682016040523d82523d6000602084013e61204a565b606091505b509150915081801561205d575080516020145b9250505090565b6000816120b35760405162461bcd60e51b815260206004820152601b60248201527f415353455254494f4e5f49445f43414e4e4f545f42455f5a45524f00000000006044820152606401610a6f565b50600090815260756020526040902090565b61217c823560208401356120df6060860160408701614191565b6120ef6080870160608801614338565b6120ff60a0880160808901614338565b60408051602080820197909752808201959095526bffffffffffffffffffffffff19606094851b16938501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b81166074860152911b16607c8301528051606481840301815260849092019052805191012090565b8114610a145760405162461bcd60e51b815260206004820152601460248201527f434f4e4649475f484153485f4d49534d415443480000000000000000000000006044820152606401610a6f565b60335460ff161561221d5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a6f565b565b600061222a85612064565b905060018154600160c81b900460ff16600281111561224b5761224b61438d565b146122985760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f50454e44494e470000000000000000000000000000000000000000006044820152606401610a6f565b6122ab846110e33686900386018661479a565b85146122f95760405162461bcd60e51b815260206004820152600c60248201527f434f4e4649524d5f4441544100000000000000000000000000000000000000006044820152606401610a6f565b600061231261230d36869003860186614814565b61359b565b9050600061232d61232836879003870187614814565b6135a6565b606c546040517fa04cee6000000000000000000000000000000000000000000000000000000000815260048101839052602481018590529192506001600160a01b03169063a04cee6090604401600060405180830381600087803b15801561239457600080fd5b505af11580156123a8573d6000803e3d6000fd5b50505060748890555082547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff167902000000000000000000000000000000000000000000000000001783556040805183815260208101839052815189927ffc42829b29c259a7370ab56c8f69fce23b5f351a9ce151da453281993ec0090c928290030190a250505050505050565b60008160800151600281111561244e5761244e61438d565b0361169d5760405162461bcd60e51b815260206004820152601360248201527f415353455254494f4e5f4e4f545f4558495354000000000000000000000000006044820152606401610a6f565b6000806124af6124aa60745490565b612064565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b90910416600281111561251a5761251a61438d565b600281111561252b5761252b61438d565b815260019190910154602090910152606654909150600160401b900467ffffffffffffffff1660008190036125635760009250505090565b816040015167ffffffffffffffff166000036125825760009250505090565b815167ffffffffffffffff16156125b457815143906125ac90839067ffffffffffffffff166148dd565b109250505090565b4381836040015167ffffffffffffffff166125ac91906148dd565b6001600160a01b038116600090815260776020526040902060020154600160401b900460ff1661262e5760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610a6f565b6001600160a01b0381166000908152607760205260408120600101546074549091908214908061265d84612064565b5467ffffffffffffffff1611905081806126745750805b6115435760405162461bcd60e51b815260206004820152600c60248201527f5354414b455f41435449564500000000000000000000000000000000000000006044820152606401610a6f565b6001600160a01b0380831660009081526077602052604081206002810154815492939192690100000000000000000090910490911690808511156127465760405162461bcd60e51b815260206004820152601060248201527f544f4f5f4c4954544c455f5354414b45000000000000000000000000000000006044820152606401610a6f565b60006127528683614801565b868555905061276183826135b2565b826001600160a01b0316876001600160a01b03167fd957cf2340073335d256f72a9ef89cf1a43c31143341a6a53575ef33e987beb884896040516127af929190918252602082015260400190565b60405180910390a39695505050505050565b60006110e9846127d085613657565b604080516020808201949094528082019290925260608083018790528151808403909101815260809092019052805191012090565b60008061281860408601610a0b86612064565b600161282c610240870161022088016148f0565b600281111561283d5761283d61438d565b148061286b57506002612858610240870161022088016148f0565b60028111156128695761286961438d565b145b6128b75760405162461bcd60e51b815260206004820152601060248201527f4241445f41465445525f535441545553000000000000000000000000000000006044820152606401610a6f565b836128d986356128cf36899003890160e08a0161479a565b60208901356127c1565b146129265760405162461bcd60e51b815260206004820152601460248201527f494e56414c49445f4245464f52455f53544154450000000000000000000000006044820152606401610a6f565b600161293a610180870161016088016148f0565b600281111561294b5761294b61438d565b146129985760405162461bcd60e51b815260206004820152600f60248201527f4241445f505245565f53544154555300000000000000000000000000000000006044820152606401610a6f565b60006129a385612064565b90506000806101a0880160e08901826129bc8383613687565b1215612a0a5760405162461bcd60e51b815260206004820152600f60248201527f494e424f585f4241434b574152445300000000000000000000000000000000006044820152606401610a6f565b6000612a30612a1f60e08d0160c08e01614338565b849067ffffffffffffffff16613794565b90506000811315612a835760405162461bcd60e51b815260206004820152600d60248201527f494e424f585f544f4f5f464152000000000000000000000000000000000000006044820152606401610a6f565b6002612a976102408d016102208e016148f0565b6002811115612aa857612aa861438d565b14158015612ab65750600081125b15612b1857600196506000612acb8484613687565b13612b185760405162461bcd60e51b815260206004820152601360248201527f4f564552464c4f575f5354414e445354494c4c000000000000000000000000006044820152606401610a6f565b606b54604080517e84120c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916284120c9160048083019260209291908290030181865afa158015612b79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9d9190614851565b90506000612bab8583613794565b1315612bf95760405162461bcd60e51b815260206004820152600e60248201527f494e424f585f504153545f454e440000000000000000000000000000000000006044820152606401610a6f565b80612c0a60e08e0160c08f01614338565b67ffffffffffffffff161115612c625760405162461bcd60e51b815260206004820152601360248201527f494e424f585f4e4f545f504f50554c41544544000000000000000000000000006044820152606401610a6f565b6000612c766119b136879003870187614814565b67ffffffffffffffff169050818103612c9b57612c948260016148dd565b9650612c9f565b8196505b80600003612cef5760405162461bcd60e51b815260206004820152601160248201527f454d5054595f494e424f585f434f554e540000000000000000000000000000006044820152606401610a6f565b606b546001600160a01b03166316bf5579612d0b600184614801565b6040518263ffffffff1660e01b8152600401612d2991815260200190565b602060405180830381865afa158015612d46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6a9190614851565b95505050505050612d8a87896101a001803603810190611e73919061479a565b945085851480612d98575085155b612de45760405162461bcd60e51b815260206004820152601960248201527f554e45585045435445445f415353455254494f4e5f48415348000000000000006044820152606401610a6f565b6000612def86612064565b54600160c81b900460ff166002811115612e0b57612e0b61438d565b14612e585760405162461bcd60e51b815260206004820152600e60248201527f415353455254494f4e5f5345454e0000000000000000000000000000000000006044820152606401610a6f565b825460685460675460695460665460408051602080820196909652808201949094526bffffffffffffffffffffffff19606093841b16838501527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116607486015288831b16607c85015280516064818603018152608485018083528151918701919091206101448601835260009182905260a4860182905260c4860182905260e4860182905261010486018290526101249095018190528151928301825280835294820185905267ffffffffffffffff43811691830191909152909416159084015260a08301526001608083015250612f5684613823565b60008681526075602090815260409182902083518154928501519385015160608601511515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff928316600160801b02167fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff968316600160401b027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909616929093169190911793909317939093169290921717808255608083015183929182907fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16600160c81b83600281111561305e5761305e61438d565b021790555060a0820151816001015590505087867f901c3aee23cf4478825462caaab375c606ab83516060388344f06503407536308b8587606854606754606960009054906101000a90046001600160a01b0316606660009054906101000a900467ffffffffffffffff166040516130dc9796959493929190614983565b60405180910390a37f00000000000000000000000000000000000000000000000000000000000000001561317d5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061316d9190614851565b6000878152607c60205260409020555b50505050935093915050565b6040516001600160a01b0383166024820152604481018290526110ad9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138a7565b336000818152607360205260409020541515806132515750607b5460ff165b61328d5760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610a6f565b6132956121ca565b33600090815260776020526040902060020154600160401b900460ff16156132ff5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f5354414b45440000000000000000000000000000000000006044820152606401610a6f565b6110ad33848461398c565b60705461169d906001600160a01b0316333084613b08565b61332b816125cf565b61169d81613b59565b6001600160a01b0381166000908152607860205260408120805490829055607980548291908490613366908490614801565b909155505060408051828152600060208201526001600160a01b038516917fa740af14c56e4e04a617b1de1eb20de73270decbaaead14f142aabf3038e5ae2910160405180910390a292915050565b6020810151600090815b602002015192915050565b6001600160a01b03831660009081526073602052604090205483901515806133f45750607b5460ff165b6134305760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610a6f565b6134386121ca565b6001600160a01b038416600090815260776020526040902060020154600160401b900460ff166134975760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610a6f565b826001600160a01b03166134d3856001600160a01b03908116600090815260776020526040902060020154690100000000000000000090041690565b6001600160a01b0316146135295760405162461bcd60e51b815260206004820152601860248201527f57524f4e475f5749544844524157414c5f4144445245535300000000000000006044820152606401610a6f565b6115438483613be4565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b606060006110ec83613c72565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d613557565b8051600090816133bf565b805160009060016133bf565b6001600160a01b038216600090815260786020526040812054906135d683836148dd565b6001600160a01b03851660009081526078602052604081208290556079805492935085929091906136089084906148dd565b909155505060408051838152602081018390526001600160a01b038616917fa740af14c56e4e04a617b1de1eb20de73270decbaaead14f142aabf3038e5ae2910160405180910390a250505050565b60008160405160200161366a9190614a6f565b604051602081830303815290604052805190602001209050919050565b60008061369c6119b136869003860186614814565b905060006136b26119b136869003860186614814565b90508067ffffffffffffffff168267ffffffffffffffff1610156136dc5760001992505050610e9f565b8067ffffffffffffffff168267ffffffffffffffff16111561370357600192505050610e9f565b600061371c61371736889003880188614814565b613cce565b9050600061373261371736889003880188614814565b90508067ffffffffffffffff168267ffffffffffffffff16101561375e57600019945050505050610e9f565b8067ffffffffffffffff168267ffffffffffffffff161115613787576001945050505050610e9f565b6000945050505050610e9f565b6000806137a96119b136869003860186614814565b9050828167ffffffffffffffff1610156137c857600019915050610e9f565b828167ffffffffffffffff1611156137e4576001915050610e9f565b60006137f861371736879003870187614814565b67ffffffffffffffff161115613812576001915050610e9f565b6000915050610e9f565b5092915050565b805467ffffffffffffffff1660000361385357805467ffffffffffffffff19164367ffffffffffffffff16179055565b8054600160401b900467ffffffffffffffff1660000361169d5780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16600160401b4367ffffffffffffffff1602179055565b60006138fc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613cdd9092919063ffffffff16565b8051909150156110ad578080602001905181019061391a9190614af9565b6110ad5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610a6f565b6076805460018082019092557fb5732705f5241370a28908c2fe1303cb223f03b90d857fd0573f003f79fefed4810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038781169182179092556040805160a081018252878152607454602080830191825267ffffffffffffffff808816848601908152606085018a81528b89166080870181815260008a8152607787528981209851895596519c88019c909c5591516002909601805491519b51969093167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000090911617600160401b9a15159a909a02999099177fffffff0000000000000000000000000000000000000000ffffffffffffffffff166901000000000000000000949097169390930295909517909155815190815292830187905292939290917fd957cf2340073335d256f72a9ef89cf1a43c31143341a6a53575ef33e987beb891015b60405180910390a350505050565b6040516001600160a01b03808516602483015283166044820152606481018290526115439085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016131ce565b6001600160a01b03808216600090815260776020526040902060028101548154919269010000000000000000009091041690613b9582826135b2565b613b9e84613cec565b60408051828152600060208201526001600160a01b0380851692908716917fd957cf2340073335d256f72a9ef89cf1a43c31143341a6a53575ef33e987beb89101613afa565b6001600160a01b038216600090815260776020526040812080549091613c0a84836148dd565b808455600284015460408051858152602081018490529293506001600160a01b036901000000000000000000909204821692918816917fd957cf2340073335d256f72a9ef89cf1a43c31143341a6a53575ef33e987beb8910160405180910390a35050505050565b606081600001805480602002602001604051908101604052809291908181526020018280548015613cc257602002820191906000526020600020905b815481526020019060010190808311613cae575b50505050509050919050565b602081015160009060016133bf565b60606110e98484600085613eea565b6001600160a01b03811660009081526077602052604090206002810154600160401b900460ff16613d4c5760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610a6f565b60028101546076805467ffffffffffffffff90921691613d6e90600190614801565b81548110613d7e57613d7e61486a565b600091825260209091200154607680546001600160a01b039092169167ffffffffffffffff8416908110613db457613db461486a565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806077600060768467ffffffffffffffff1681548110613e0457613e0461486a565b6000918252602080832091909101546001600160a01b031683528201929092526040019020600201805467ffffffffffffffff191667ffffffffffffffff929092169190911790556076805480613e5d57613e5d614b14565b60008281526020808220830160001990810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690559092019092556001600160a01b039490941681526077909352505060408120818155600181019190915560020180547fffffff0000000000000000000000000000000000000000000000000000000000169055565b606082471015613f625760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610a6f565b6001600160a01b0385163b613fb95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a6f565b600080866001600160a01b03168587604051613fd591906148c1565b60006040518083038185875af1925050503d8060008114614012576040519150601f19603f3d011682016040523d82523d6000602084013e614017565b606091505b5091509150614027828286614032565b979650505050505050565b606083156140415750816110ec565b8251156140515782518084602001fd5b8160405162461bcd60e51b8152600401610a6f9190614b2a565b604051806040016040528061407e614090565b815260200161408b614090565b905290565b60405180604001604052806002906020820280368337509192915050565b600060a082840312156140c057600080fd5b50919050565b60008060c083850312156140d957600080fd5b823591506140ea84602085016140ae565b90509250929050565b600060c082840312156140c057600080fd5b6000806000806000806101e0878903121561411f57600080fd5b863595506020870135945061413788604089016140f3565b9350610100870135925061414f8861012089016140ae565b91506101c087013590509295509295509295565b60006020828403121561417557600080fd5b5035919050565b6001600160a01b038116811461169d57600080fd5b6000602082840312156141a357600080fd5b81356110ec8161417c565b600080600061010084860312156141c457600080fd5b833592506141d585602086016140f3565b915060e084013590509250925092565b600061026082840312156140c057600080fd5b600080610280838503121561420c57600080fd5b61421684846141e5565b94610260939093013593505050565b6000806000806102c0858703121561423c57600080fd5b8435935061424d86602087016141e5565b925061028085013591506102a08501356142668161417c565b939692955090935050565b600080600080610120858703121561428857600080fd5b84359350602085013592506142a086604087016140f3565b939692955092936101000135925050565b600080604083850312156142c457600080fd5b8235915060208301356142d68161417c565b809150509250929050565b6000806000606084860312156142f657600080fd5b83356143018161417c565b925060208401356143118161417c565b929592945050506040919091013590565b67ffffffffffffffff8116811461169d57600080fd5b60006020828403121561434a57600080fd5b81356110ec81614322565b60008060006102a0848603121561436b57600080fd5b8335925061437c85602086016141e5565b915061028084013590509250925092565b634e487b7160e01b600052602160045260246000fd5b6003811061169d57634e487b7160e01b600052602160045260246000fd5b600060c08201905067ffffffffffffffff80845116835280602085015116602084015280604085015116604084015250606083015115156060830152608083015161440b816143a3565b8060808401525060a083015160a083015292915050565b6020808252825182820181905260009190848201906040850190845b818110156144635783516001600160a01b03168352928401929184019160010161443e565b50909695505050505050565b600080600080610120858703121561448657600080fd5b8435935061449786602087016140f3565b939693955050505060e082013591610100013590565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff81811683821601908082111561381c5761381c6144ad565b634e487b7160e01b600052604160045260246000fd5b6040516101e0810167ffffffffffffffff8111828210171561451e5761451e6144e4565b60405290565b6040805190810167ffffffffffffffff8111828210171561451e5761451e6144e4565b8051610f5e8161417c565b8051610f5e81614322565b805160028110610f5e57600080fd5b805160ff81168114610f5e57600080fd5b80518015158114610f5e57600080fd5b60006101e082840312156145a057600080fd5b6145a86144fa565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e0820152610100614600818501614547565b90820152610120614612848201614552565b90820152610140614624848201614552565b9082015261016061463684820161455d565b9082015261018061464884820161456c565b908201526101a061465a84820161457d565b908201526101c061466c848201614552565b908201529392505050565b600082601f83011261468857600080fd5b6040516040810181811067ffffffffffffffff821117156146ab576146ab6144e4565b80604052508060408401858111156146c257600080fd5b845b818110156146e55780356146d781614322565b8352602092830192016146c4565b509195945050505050565b60006080828403121561470257600080fd5b6040516040810181811067ffffffffffffffff82111715614725576147256144e4565b604052905080601f8301841361473a57600080fd5b614742614524565b80604085018681111561475457600080fd5b855b8181101561476e578035845260209384019301614756565b5081845261477c8782614677565b60208501525050505092915050565b803560038110610f5e57600080fd5b600060c082840312156147ac57600080fd5b6040516060810181811067ffffffffffffffff821117156147cf576147cf6144e4565b6040526147dc84846146f0565b81526147ea6080840161478b565b602082015260a09290920135604083015250919050565b81810381811115610e9f57610e9f6144ad565b60006080828403121561482657600080fd5b6110ec83836146f0565b67ffffffffffffffff82811682821603908082111561381c5761381c6144ad565b60006020828403121561486357600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561489257600080fd5b81516110ec8161417c565b60005b838110156148b85781810151838201526020016148a0565b50506000910152565b600082516148d381846020870161489d565b9190910192915050565b80820180821115610e9f57610e9f6144ad565b60006020828403121561490257600080fd5b6110ec8261478b565b614914816143a3565b9052565b6040818337604082016040820160005b600281101561495b57813561493c81614322565b67ffffffffffffffff1683526020928301929190910190600101614928565b50505061496a6080820161478b565b614973816143a3565b608083015260a090810135910152565b6000610320820190508835825260208901356020830152604089013560408301526060890135606083015260808901356149bc8161417c565b6001600160a01b0316608083015260a08901356149d881614322565b67ffffffffffffffff90811660a084015260c08a0135906149f882614322565b1660c0830152614a0e60e0808401908b01614918565b6101a0614a1f818401828c01614918565b508761026083015286610280830152856102a0830152846102c0830152614a526102e08301856001600160a01b03169052565b67ffffffffffffffff831661030083015298975050505050505050565b8151805160c0830191908360005b6002811015614a9c578251825260209283019290910190600101614a7d565b505050602090810151906040840160005b6002811015614ad457835167ffffffffffffffff1682529282019290820190600101614aad565b50508401519050614ae8608084018261490b565b50604083015160a083015292915050565b600060208284031215614b0b57600080fd5b6110ec8261457d565b634e487b7160e01b600052603160045260246000fd5b6020815260008251806020840152614b4981604085016020870161489d565b601f01601f1916919091016040019291505056fea2646970667358221220a53afaa4c737f3c59ce7695d2be411e1bf4c2b4140c9002323dca5f243018c5364736f6c63430008110033", } // RollupUserLogicABI is the input ABI used to generate the binding from. @@ -29872,7 +29872,7 @@ func (_RollupUserLogic *RollupUserLogicFilterer) ParseUserWithdrawableFundsUpdat // StateHashPreImageLookupMetaData contains all meta data concerning the StateHashPreImageLookup contract. var StateHashPreImageLookupMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"h\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"structExecutionState\",\"name\":\"executionState\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"}],\"name\":\"HashSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"h\",\"type\":\"bytes32\"}],\"name\":\"get\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"}],\"internalType\":\"structExecutionState\",\"name\":\"executionState\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"h\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"}],\"internalType\":\"structExecutionState\",\"name\":\"executionState\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"}],\"name\":\"set\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"}],\"internalType\":\"structExecutionState\",\"name\":\"executionState\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"}],\"name\":\"stateHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50610a0d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806331644130146100465780638eaa6ac01461006c578063945c94941461008d575b600080fd5b61005961005436600461041d565b6100a2565b6040519081526020015b60405180910390f35b61007f61007a366004610448565b610193565b604051610063929190610483565b6100a061009b36600461050a565b6102bf565b005b60006101526100b636859003850185610598565b8051805160209182015192820151805190830151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081870152602d810194909452604d8401959095527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d850152911b1660758201528251808203605d018152607d909101909252815191012090565b8261016360a0860160808701610667565b6040516020016101759392919061068b565b60405160208183030381529060405280519060200120905092915050565b61019b6103ab565b600082815260208190526040812080546101b4906106c9565b80601f01602080910402602001604051908101604052809291908181526020018280546101e0906106c9565b801561022d5780601f106102025761010080835404028352916020019161022d565b820191906000526020600020905b81548152906001019060200180831161021057829003601f168201915b50505050508060200190518101906102459190610766565b909250905060008190036102ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f48617368206e6f7420796574207365740000000000000000000000000000000060448201526064015b60405180910390fd5b915091565b6102c982826100a2565b8314610331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f496e76616c69642068617368000000000000000000000000000000000000000060448201526064016102b1565b818160405160200161034492919061088c565b60408051601f1981840301815291815260008581526020819052209061036a90826108f5565b507f14c0a6b8d81f5915dacfd85e41ae4798343ec29de408ac4c13360c7238ae0ad983838360405161039e939291906109b5565b60405180910390a1505050565b60405180604001604052806103be6103cb565b815260200160005b905290565b60405180604001604052806103de6103e7565b81526020016103c65b60405180604001604052806002906020820280368337509192915050565b600060a0828403121561041757600080fd5b50919050565b60008060c0838503121561043057600080fd5b61043a8484610405565b9460a0939093013593505050565b60006020828403121561045a57600080fd5b5035919050565b6003811061047f57634e487b7160e01b600052602160045260246000fd5b9052565b8251805160c0830191908360005b60028110156104b0578251825260209283019290910190600101610491565b505050602090810151906040840160005b60028110156104e857835167ffffffffffffffff16825292820192908201906001016104c1565b505085015190506104fc6080840182610461565b508260a08301529392505050565b600080600060e0848603121561051f57600080fd5b833592506105308560208601610405565b915060c084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561057957610579610540565b60405290565b67ffffffffffffffff8116811461059557600080fd5b50565b6000608082840312156105aa57600080fd5b6105b2610556565b83601f8401126105c157600080fd5b6105c9610556565b8060408501868111156105db57600080fd5b855b818110156105f55780358452602093840193016105dd565b5081845286605f87011261060857600080fd5b610610610556565b9250829150608086018781111561062657600080fd5b8082101561064b5781356106398161057f565b84526020938401939190910190610626565b50506020830152509392505050565b6003811061059557600080fd5b60006020828403121561067957600080fd5b81356106848161065a565b9392505050565b8381528260208201526000600383106106b457634e487b7160e01b600052602160045260246000fd5b5060f89190911b604082015260410192915050565b600181811c908216806106dd57607f821691505b60208210810361041757634e487b7160e01b600052602260045260246000fd5b600082601f83011261070e57600080fd5b610716610556565b80604084018581111561072857600080fd5b845b8181101561074b57805161073d8161057f565b84526020938401930161072a565b509095945050505050565b80516107618161065a565b919050565b60008082840360c081121561077a57600080fd5b60a081121561078857600080fd5b610790610556565b608082121561079e57600080fd5b6107a6610556565b915085601f8601126107b757600080fd5b6107bf610556565b8060408701888111156107d157600080fd5b875b818110156107eb5780518452602093840193016107d3565b508185526107f989826106fd565b602086015250505081815261081060808601610756565b602082015260a094909401519395939450505050565b6040818337604082016040820160005b600281101561086957813561084a8161057f565b67ffffffffffffffff1683526020928301929190910190600101610836565b505050608081013561087a8161065a565b6108876080840182610461565b505050565b60c0810161089a8285610826565b8260a08301529392505050565b601f82111561088757600081815260208120601f850160051c810160208610156108ce5750805b601f850160051c820191505b818110156108ed578281556001016108da565b505050505050565b815167ffffffffffffffff81111561090f5761090f610540565b6109238161091d84546106c9565b846108a7565b602080601f83116001811461095857600084156109405750858301515b600019600386901b1c1916600185901b1785556108ed565b600085815260208120601f198616915b8281101561098757888601518255948401946001909101908401610968565b50858210156109a55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b83815260e081016109c96020830185610826565b8260c083015294935050505056fea2646970667358221220878536b467a360e5d7d47c4735544955649e5a25f5dc24936fcb6802c7008b4864736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b50610a0d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806331644130146100465780638eaa6ac01461006c578063945c94941461008d575b600080fd5b61005961005436600461041d565b6100a2565b6040519081526020015b60405180910390f35b61007f61007a366004610448565b610193565b604051610063929190610483565b6100a061009b36600461050a565b6102bf565b005b60006101526100b636859003850185610598565b8051805160209182015192820151805190830151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081870152602d810194909452604d8401959095527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d850152911b1660758201528251808203605d018152607d909101909252815191012090565b8261016360a0860160808701610667565b6040516020016101759392919061068b565b60405160208183030381529060405280519060200120905092915050565b61019b6103ab565b600082815260208190526040812080546101b4906106c9565b80601f01602080910402602001604051908101604052809291908181526020018280546101e0906106c9565b801561022d5780601f106102025761010080835404028352916020019161022d565b820191906000526020600020905b81548152906001019060200180831161021057829003601f168201915b50505050508060200190518101906102459190610766565b909250905060008190036102ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f48617368206e6f7420796574207365740000000000000000000000000000000060448201526064015b60405180910390fd5b915091565b6102c982826100a2565b8314610331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f496e76616c69642068617368000000000000000000000000000000000000000060448201526064016102b1565b818160405160200161034492919061088c565b60408051601f1981840301815291815260008581526020819052209061036a90826108f5565b507f14c0a6b8d81f5915dacfd85e41ae4798343ec29de408ac4c13360c7238ae0ad983838360405161039e939291906109b5565b60405180910390a1505050565b60405180604001604052806103be6103cb565b815260200160005b905290565b60405180604001604052806103de6103e7565b81526020016103c65b60405180604001604052806002906020820280368337509192915050565b600060a0828403121561041757600080fd5b50919050565b60008060c0838503121561043057600080fd5b61043a8484610405565b9460a0939093013593505050565b60006020828403121561045a57600080fd5b5035919050565b6003811061047f57634e487b7160e01b600052602160045260246000fd5b9052565b8251805160c0830191908360005b60028110156104b0578251825260209283019290910190600101610491565b505050602090810151906040840160005b60028110156104e857835167ffffffffffffffff16825292820192908201906001016104c1565b505085015190506104fc6080840182610461565b508260a08301529392505050565b600080600060e0848603121561051f57600080fd5b833592506105308560208601610405565b915060c084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561057957610579610540565b60405290565b67ffffffffffffffff8116811461059557600080fd5b50565b6000608082840312156105aa57600080fd5b6105b2610556565b83601f8401126105c157600080fd5b6105c9610556565b8060408501868111156105db57600080fd5b855b818110156105f55780358452602093840193016105dd565b5081845286605f87011261060857600080fd5b610610610556565b9250829150608086018781111561062657600080fd5b8082101561064b5781356106398161057f565b84526020938401939190910190610626565b50506020830152509392505050565b6003811061059557600080fd5b60006020828403121561067957600080fd5b81356106848161065a565b9392505050565b8381528260208201526000600383106106b457634e487b7160e01b600052602160045260246000fd5b5060f89190911b604082015260410192915050565b600181811c908216806106dd57607f821691505b60208210810361041757634e487b7160e01b600052602260045260246000fd5b600082601f83011261070e57600080fd5b610716610556565b80604084018581111561072857600080fd5b845b8181101561074b57805161073d8161057f565b84526020938401930161072a565b509095945050505050565b80516107618161065a565b919050565b60008082840360c081121561077a57600080fd5b60a081121561078857600080fd5b610790610556565b608082121561079e57600080fd5b6107a6610556565b915085601f8601126107b757600080fd5b6107bf610556565b8060408701888111156107d157600080fd5b875b818110156107eb5780518452602093840193016107d3565b508185526107f989826106fd565b602086015250505081815261081060808601610756565b602082015260a094909401519395939450505050565b6040818337604082016040820160005b600281101561086957813561084a8161057f565b67ffffffffffffffff1683526020928301929190910190600101610836565b505050608081013561087a8161065a565b6108876080840182610461565b505050565b60c0810161089a8285610826565b8260a08301529392505050565b601f82111561088757600081815260208120601f850160051c810160208610156108ce5750805b601f850160051c820191505b818110156108ed578281556001016108da565b505050505050565b815167ffffffffffffffff81111561090f5761090f610540565b6109238161091d84546106c9565b846108a7565b602080601f83116001811461095857600084156109405750858301515b600019600386901b1c1916600185901b1785556108ed565b600085815260208120601f198616915b8281101561098757888601518255948401946001909101908401610968565b50858210156109a55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b83815260e081016109c96020830185610826565b8260c083015294935050505056fea2646970667358221220a81f5137e89bc68cab9cf1e408a23485cf78c3379ec0e6a20a536ca3b822d30664736f6c63430008110033", } // StateHashPreImageLookupABI is the input ABI used to generate the binding from. From d824ba5f069c6703509daa48169e8f8318e13836 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Thu, 13 Jun 2024 15:08:43 -0400 Subject: [PATCH 18/23] set grace period sepolia --- contracts/scripts/files/configs/sepolia.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/scripts/files/configs/sepolia.ts b/contracts/scripts/files/configs/sepolia.ts index 7cc3bc608..c12bb4773 100644 --- a/contracts/scripts/files/configs/sepolia.ts +++ b/contracts/scripts/files/configs/sepolia.ts @@ -24,7 +24,7 @@ export const sepolia: Config = { seqInbox: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', }, settings: { - challengeGracePeriodBlocks: hoursToBlocks(12), + challengeGracePeriodBlocks: hoursToBlocks(48), confirmPeriodBlocks: 45818, // current is 20 blocks, 45818 is arb1 config challengePeriodBlocks: 45818, // same as confirm period stakeToken: '0xefb383126640fe4a760010c6e59c397d2b6c7141', // WETH From e17495cb047dd2e3014f6d676cd09d1a5ab41799 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Mon, 17 Jun 2024 15:52:49 -0400 Subject: [PATCH 19/23] keep sepolia whitelist and short confirm period --- contracts/scripts/files/configs/sepolia.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/contracts/scripts/files/configs/sepolia.ts b/contracts/scripts/files/configs/sepolia.ts index c12bb4773..5156b9307 100644 --- a/contracts/scripts/files/configs/sepolia.ts +++ b/contracts/scripts/files/configs/sepolia.ts @@ -25,8 +25,8 @@ export const sepolia: Config = { }, settings: { challengeGracePeriodBlocks: hoursToBlocks(48), - confirmPeriodBlocks: 45818, // current is 20 blocks, 45818 is arb1 config - challengePeriodBlocks: 45818, // same as confirm period + confirmPeriodBlocks: 20, // current is 20 blocks, 45818 is arb1 config + challengePeriodBlocks: 45818, // same as arb1 stakeToken: '0xefb383126640fe4a760010c6e59c397d2b6c7141', // WETH stakeAmt: parseEther('36'), // 1/100th of arb1, same for mini stakes miniStakeAmounts: [ @@ -36,13 +36,13 @@ export const sepolia: Config = { ], chainId: 421614, anyTrustFastConfirmer: '0x0000000000000000000000000000000000000000', - disableValidatorWhitelist: true, // warrants discussion + disableValidatorWhitelist: false, blockLeafSize: 2**26, // leaf sizes same as arb1 bigStepLeafSize: 2**19, smallStepLeafSize: 2**23, numBigStepLevel: 1, maxDataSize: 117964, - isDelayBufferable: true, + isDelayBufferable: false, // batch poster not yet ready bufferConfig: { max: hoursToBlocks(48), threshold: hoursToBlocks(1), From f51801ff148bfdc6e11cb5601cfb2318c1155390 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Mon, 17 Jun 2024 15:55:58 -0400 Subject: [PATCH 20/23] update grace period --- contracts/scripts/files/configs/sepolia.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/scripts/files/configs/sepolia.ts b/contracts/scripts/files/configs/sepolia.ts index 5156b9307..0841f6068 100644 --- a/contracts/scripts/files/configs/sepolia.ts +++ b/contracts/scripts/files/configs/sepolia.ts @@ -24,7 +24,7 @@ export const sepolia: Config = { seqInbox: '0xdd63bcaa89d7c3199ef220c1dd59c49f821078b8', }, settings: { - challengeGracePeriodBlocks: hoursToBlocks(48), + challengeGracePeriodBlocks: 20, confirmPeriodBlocks: 20, // current is 20 blocks, 45818 is arb1 config challengePeriodBlocks: 45818, // same as arb1 stakeToken: '0xefb383126640fe4a760010c6e59c397d2b6c7141', // WETH From 6265a50f184db8ac39b064a382c01d0251548435 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Mon, 17 Jun 2024 16:40:12 -0400 Subject: [PATCH 21/23] checked sepolia validators --- contracts/scripts/files/configs/sepolia.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/scripts/files/configs/sepolia.ts b/contracts/scripts/files/configs/sepolia.ts index 0841f6068..a52563689 100644 --- a/contracts/scripts/files/configs/sepolia.ts +++ b/contracts/scripts/files/configs/sepolia.ts @@ -49,7 +49,7 @@ export const sepolia: Config = { replenishRateInBasis: 500, }, }, - validators: [ // TODO: double check validators or just remove them + validators: [ // current validators '0x8a8f0a24d7e58a76FC8F77bb68C7c902b91e182e', '0x87630025E63A30eCf9Ca9d580d9D95922Fea6aF0', '0xC32B93e581db6EBc50C08ce381143A259B92f1ED', From edfa40566ecaad6ecf882eaebb7060946e299e2c Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Mon, 17 Jun 2024 16:53:35 -0400 Subject: [PATCH 22/23] checked arb1 validators --- contracts/scripts/files/configs/arb1.ts | 28 ++++++++++++------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/contracts/scripts/files/configs/arb1.ts b/contracts/scripts/files/configs/arb1.ts index 513c93d31..02c8966e2 100644 --- a/contracts/scripts/files/configs/arb1.ts +++ b/contracts/scripts/files/configs/arb1.ts @@ -45,19 +45,19 @@ export const arb1: Config = { replenishRateInBasis: 500, }, }, - validators: [ // TODO: double check validators or just remove them - '0x0ff813f6bd577c3d1cdbe435bac0621be6ae34b4', - '0x54c0d3d6c101580db3be8763a2ae2c6bb9dc840c', - '0x56d83349c2b8dcf74d7e92d5b6b33d0badd52d78', - '0x610aa279989f440820e14248bd3879b148717974', - '0x6fb914de4653ec5592b7c15f4d9466cbd03f2104', - '0x758c6bb08b3ea5889b5cddbdef9a45b3a983c398', - '0x7cf3d537733f6ba4183a833c9b021265716ce9d0', - '0x83215480db2c6a7e56f9e99ef93ab9b36f8a3dd5', - '0xab1a39332e934300ebcc57b5f95ca90631a347ff', - '0xb0cb1384e3f4a9a9b2447e39b05e10631e1d34b0', - '0xddf2f71ab206c0138a8eceeb54386567d5abf01e', - '0xf59caf75e8a4bfba4e6e07ad86c7e498e4d2519b', - '0xf8d3e1cf58386c92b27710c6a0d8a54c76bc6ab5', + validators: [ // current validators + '0x83215480dB2C6A7E56f9E99EF93AB9B36F8A3DD5', + '0x7CF3d537733F6Ba4183A833c9B021265716cE9d0', + '0x56D83349c2B8DCF74d7E92D5b6B33d0BADD52D78', + '0x758C6bB08B3ea5889B5cddbdeF9A45b3a983c398', + '0x6Fb914de4653eC5592B7c15F4d9466Cbd03F2104', + '0xf59caf75e8A4bFBA4e6e07aD86C7E498E4d2519b', + '0xB0CB1384e3f4a9a9b2447e39b05e10631E1D34B0', + '0x54c0D3d6C101580dB3be8763A2aE2c6bb9dc840c', + '0x0fF813f6BD577c3D1cDbE435baC0621BE6aE34B4', + '0xAB1A39332e934300eBCc57B5f95cA90631a347FF', + '0xdDf2F71Ab206C0138A8eceEb54386567D5abF01E', + '0x610Aa279989F440820e14248BD3879B148717974', + '0xF8D3E1cF58386c92B27710C6a0D8A54c76BC6ab5' ], } From d27762fadc67f647acf99c8b4e7207984ac916a8 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Mon, 17 Jun 2024 16:57:51 -0400 Subject: [PATCH 23/23] checked nova validators --- contracts/scripts/files/configs/nova.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/contracts/scripts/files/configs/nova.ts b/contracts/scripts/files/configs/nova.ts index 308753a28..5900302e7 100644 --- a/contracts/scripts/files/configs/nova.ts +++ b/contracts/scripts/files/configs/nova.ts @@ -49,9 +49,10 @@ export const nova: Config = { replenishRateInBasis: 500, }, }, - validators: [ // TODO: double check validators - '0xE27d4Ed355e5273A3D4855c8e11BC4a8d3e39b87', - '0x57004b440Cc4eb2FEd8c4d1865FaC907F9150C76', - '0x24ca61c31c7f9af3ab104db6b9a444f28e9071e3', + validators: [ // current validators + '0xB51EDdfc9A945e2B909905e4F242C4796Ac0C61d', + '0x54c0D3d6C101580dB3be8763A2aE2c6bb9dc840c', + '0x658e8123722462F888b6fa01a7dbcEFe1D6DD709', + '0xDfB23DFE9De7dcC974467195C8B7D5cd21C9d7cB' ], }