From 89522c66959a45a407f7d6ad9d27d689d2273e7c Mon Sep 17 00:00:00 2001 From: Karim <162329697+kimo-ice@users.noreply.github.com> Date: Wed, 18 Sep 2024 17:16:46 +0200 Subject: [PATCH 01/13] ci(protocol): add step to install git in workflows and use new runner (#18138) Co-authored-by: Karim Co-authored-by: maskpp --- .github/workflows/bridge-ui--ci.yml | 5 ++++- .github/workflows/docs-site--preview.yml | 5 ++++- .github/workflows/docs-site--production.yml | 5 ++++- .github/workflows/eventindexer.yml | 9 ++++++--- .github/workflows/fork-diff--preview.yml | 5 ++++- .github/workflows/fork-diff--production.yml | 5 ++++- .github/workflows/nfts.yml | 5 ++++- .github/workflows/protocol.yml | 5 ++++- .github/workflows/relayer.yml | 9 ++++++--- .github/workflows/snaefell-ui--ci.yml | 5 ++++- .github/workflows/supplementary-contracts.yml | 5 ++++- .github/workflows/taiko-client--docker.yml | 5 ++++- .github/workflows/taiko-client--hive_test.yml | 5 ++++- .github/workflows/taiko-client--test.yml | 5 ++++- .github/workflows/taikoon-ui--ci.yml | 5 ++++- .github/workflows/ui-lib--ci.yml | 5 ++++- 16 files changed, 68 insertions(+), 20 deletions(-) diff --git a/.github/workflows/bridge-ui--ci.yml b/.github/workflows/bridge-ui--ci.yml index d270c524ec..4c1bb10c37 100644 --- a/.github/workflows/bridge-ui--ci.yml +++ b/.github/workflows/bridge-ui--ci.yml @@ -4,13 +4,16 @@ on: workflow_call jobs: build: - runs-on: [taiko-runner] + runs-on: [arc-runner-set] steps: - name: Cancel previous runs uses: styfle/cancel-workflow-action@0.12.1 with: access_token: ${{ github.token }} + - name: Install Git + run: sudo apt-get update && sudo apt-get install -y git + - name: Checkout repository uses: actions/checkout@v4 diff --git a/.github/workflows/docs-site--preview.yml b/.github/workflows/docs-site--preview.yml index 910fa4dc96..817eb7a018 100644 --- a/.github/workflows/docs-site--preview.yml +++ b/.github/workflows/docs-site--preview.yml @@ -14,8 +14,11 @@ on: jobs: deploy-docs-site-preview: - runs-on: [taiko-runner] + runs-on: [arc-runner-set] steps: + - name: Install Git + run: sudo apt-get update && sudo apt-get install -y git + - name: Checkout repository uses: actions/checkout@v4 diff --git a/.github/workflows/docs-site--production.yml b/.github/workflows/docs-site--production.yml index c450567596..78e03a182a 100644 --- a/.github/workflows/docs-site--production.yml +++ b/.github/workflows/docs-site--production.yml @@ -11,8 +11,11 @@ on: jobs: deploy-docs-site-production: - runs-on: [taiko-runner] + runs-on: [arc-runner-set] steps: + - name: Install Git + run: sudo apt-get update && sudo apt-get install -y git + - name: Checkout repository uses: actions/checkout@v4 diff --git a/.github/workflows/eventindexer.yml b/.github/workflows/eventindexer.yml index b6b42eaefe..1ff534248c 100644 --- a/.github/workflows/eventindexer.yml +++ b/.github/workflows/eventindexer.yml @@ -18,7 +18,7 @@ jobs: lint-eventindexer: name: lint-eventindexer if: github.event_name == 'pull_request' - runs-on: [taiko-runner] + runs-on: [arc-runner-set] steps: - uses: actions/setup-go@v5 with: @@ -35,7 +35,7 @@ jobs: args: --config=.golangci.yml --timeout=4m test-eventindexer: - runs-on: [taiko-runner] + runs-on: [arc-runner-set] if: ${{ github.event_name == 'pull_request' && github.event.pull_request.draft == false }} needs: lint-eventindexer steps: @@ -66,9 +66,12 @@ jobs: # Skip dependabot PRs if: ${{ github.event_name == 'pull_request' && ! startsWith(github.ref, 'refs/heads/dependabot/') }} name: Build and push docker image - runs-on: [taiko-runner] + runs-on: [arc-runner-set] steps: + - name: Install Git + run: sudo apt-get update && sudo apt-get install -y git + - name: Checkout uses: actions/checkout@v4 with: diff --git a/.github/workflows/fork-diff--preview.yml b/.github/workflows/fork-diff--preview.yml index 64f4d69bca..0c62bcd22a 100644 --- a/.github/workflows/fork-diff--preview.yml +++ b/.github/workflows/fork-diff--preview.yml @@ -15,8 +15,11 @@ on: jobs: deploy-fork-diff-preview: - runs-on: [taiko-runner] + runs-on: [arc-runner-set] steps: + - name: Install Git + run: sudo apt-get update && sudo apt-get install -y git + - name: Checkout repository uses: actions/checkout@v4 diff --git a/.github/workflows/fork-diff--production.yml b/.github/workflows/fork-diff--production.yml index fa9c9db3f1..c8c7b7cbce 100644 --- a/.github/workflows/fork-diff--production.yml +++ b/.github/workflows/fork-diff--production.yml @@ -12,8 +12,11 @@ on: jobs: deploy-fork-diff-production: - runs-on: [taiko-runner] + runs-on: [arc-runner-set] steps: + - name: Install Git + run: sudo apt-get update && sudo apt-get install -y git + - name: Checkout repository uses: actions/checkout@v4 diff --git a/.github/workflows/nfts.yml b/.github/workflows/nfts.yml index 93a41de561..c7098c1da0 100644 --- a/.github/workflows/nfts.yml +++ b/.github/workflows/nfts.yml @@ -9,13 +9,16 @@ on: jobs: build-nfts-contracts: if: github.event.pull_request.draft == false - runs-on: [taiko-runner] + runs-on: [arc-runner-set] steps: - name: Cancel previous runs uses: styfle/cancel-workflow-action@0.12.1 with: access_token: ${{ github.token }} + - name: Install Git + run: sudo apt-get update && sudo apt-get install -y git + - name: Checkout repository uses: actions/checkout@v4 with: diff --git a/.github/workflows/protocol.yml b/.github/workflows/protocol.yml index 5952fb968e..cbd1bbbd58 100644 --- a/.github/workflows/protocol.yml +++ b/.github/workflows/protocol.yml @@ -9,7 +9,7 @@ on: jobs: build-protocol: if: github.event.pull_request.draft == false - runs-on: [taiko-runner] + runs-on: [arc-runner-set] permissions: # Give the necessary permissions for stefanzweifel/git-auto-commit-action. contents: write @@ -19,6 +19,9 @@ jobs: with: access_token: ${{ github.token }} + - name: Install Git + run: sudo apt-get update && sudo apt-get install -y git + - name: Checkout repository uses: actions/checkout@v4 with: diff --git a/.github/workflows/relayer.yml b/.github/workflows/relayer.yml index e42cd859b4..976b854ad4 100644 --- a/.github/workflows/relayer.yml +++ b/.github/workflows/relayer.yml @@ -18,7 +18,7 @@ jobs: lint-relayer: name: lint-relayer if: ${{ github.event_name == 'pull_request' && github.event.pull_request.draft == false }} - runs-on: [taiko-runner] + runs-on: [arc-runner-set] steps: - uses: actions/setup-go@v5 with: @@ -36,7 +36,7 @@ jobs: test-relayer: if: ${{ github.event_name == 'pull_request' && github.event.pull_request.draft == false }} - runs-on: [taiko-runner] + runs-on: [arc-runner-set] needs: lint-relayer steps: - name: Cancel Previous Runs @@ -66,9 +66,12 @@ jobs: # Skip dependabot PRs if: ${{ github.event_name == 'pull_request' && ! startsWith(github.ref, 'refs/heads/dependabot/') }} name: Build and push docker image - runs-on: [taiko-runner] + runs-on: [arc-runner-set] steps: + - name: Install Git + run: sudo apt-get update && sudo apt-get install -y git + - name: Checkout uses: actions/checkout@v4 with: diff --git a/.github/workflows/snaefell-ui--ci.yml b/.github/workflows/snaefell-ui--ci.yml index 59eb8b0481..0ac4039827 100644 --- a/.github/workflows/snaefell-ui--ci.yml +++ b/.github/workflows/snaefell-ui--ci.yml @@ -4,13 +4,16 @@ on: workflow_call jobs: build: - runs-on: [taiko-runner] + runs-on: [arc-runner-set] steps: - name: Cancel previous runs uses: styfle/cancel-workflow-action@0.12.1 with: access_token: ${{ github.token }} + - name: Install Git + run: sudo apt-get update && sudo apt-get install -y git + - name: Checkout repository uses: actions/checkout@v4 with: diff --git a/.github/workflows/supplementary-contracts.yml b/.github/workflows/supplementary-contracts.yml index 76025fb93e..cf58474057 100644 --- a/.github/workflows/supplementary-contracts.yml +++ b/.github/workflows/supplementary-contracts.yml @@ -9,13 +9,16 @@ on: jobs: build-supplementary-contracts: if: github.event.pull_request.draft == false - runs-on: [taiko-runner] + runs-on: [arc-runner-set] steps: - name: Cancel previous runs uses: styfle/cancel-workflow-action@0.12.1 with: access_token: ${{ github.token }} + - name: Install Git + run: sudo apt-get update && sudo apt-get install -y git + - name: Checkout repository uses: actions/checkout@v4 with: diff --git a/.github/workflows/taiko-client--docker.yml b/.github/workflows/taiko-client--docker.yml index 3f1441fe61..8b5ed92188 100644 --- a/.github/workflows/taiko-client--docker.yml +++ b/.github/workflows/taiko-client--docker.yml @@ -11,9 +11,12 @@ on: jobs: push-docker-image: name: Build and push docker image - runs-on: [ubuntu-latest] + runs-on: [arc-runner-set] steps: + - name: Install Git + run: sudo apt-get update && sudo apt-get install -y git + - name: Checkout uses: actions/checkout@v4 diff --git a/.github/workflows/taiko-client--hive_test.yml b/.github/workflows/taiko-client--hive_test.yml index 22ee0c92c5..edea54a679 100644 --- a/.github/workflows/taiko-client--hive_test.yml +++ b/.github/workflows/taiko-client--hive_test.yml @@ -12,7 +12,7 @@ jobs: hive_tests: if: github.event.pull_request.draft == false && contains(github.event.pull_request.labels.*.name, 'option.hive-test') name: hive tests - runs-on: [ubuntu-latest] + runs-on: [arc-runner-set] timeout-minutes: 20 steps: @@ -21,6 +21,9 @@ jobs: with: access_token: ${{ github.token }} + - name: Install Git + run: sudo apt-get update && sudo apt-get install -y git + - uses: actions/checkout@v4 - name: Set up Go diff --git a/.github/workflows/taiko-client--test.yml b/.github/workflows/taiko-client--test.yml index 8d2a6336b2..0c88c6988f 100644 --- a/.github/workflows/taiko-client--test.yml +++ b/.github/workflows/taiko-client--test.yml @@ -12,8 +12,11 @@ jobs: lint: if: github.event.pull_request.draft == false name: Lint - runs-on: [ubuntu-latest] + runs-on: [arc-runner-set] steps: + - name: Install Git + run: sudo apt-get update && sudo apt-get install -y git make + - uses: actions/checkout@v4 - name: Set up Go diff --git a/.github/workflows/taikoon-ui--ci.yml b/.github/workflows/taikoon-ui--ci.yml index 8aecc97c8b..7088ceb84f 100644 --- a/.github/workflows/taikoon-ui--ci.yml +++ b/.github/workflows/taikoon-ui--ci.yml @@ -4,13 +4,16 @@ on: workflow_call jobs: build: - runs-on: [taiko-runner] + runs-on: [arc-runner-set] steps: - name: Cancel previous runs uses: styfle/cancel-workflow-action@0.12.1 with: access_token: ${{ github.token }} + - name: Install Git + run: sudo apt-get update && sudo apt-get install -y git + - name: Checkout repository uses: actions/checkout@v4 with: diff --git a/.github/workflows/ui-lib--ci.yml b/.github/workflows/ui-lib--ci.yml index 4616023976..9dc97e4b1c 100644 --- a/.github/workflows/ui-lib--ci.yml +++ b/.github/workflows/ui-lib--ci.yml @@ -4,13 +4,16 @@ on: workflow_call jobs: build: - runs-on: [taiko-runner] + runs-on: [arc-runner-set] steps: - name: Cancel previous runs uses: styfle/cancel-workflow-action@0.12.1 with: access_token: ${{ github.token }} + - name: Install Git + run: sudo apt-get update && sudo apt-get install -y git + - name: Checkout repository uses: actions/checkout@v4 with: From 10c29727081bd8f8b94bbfc4472b162ec552ef64 Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Thu, 19 Sep 2024 00:28:23 +0800 Subject: [PATCH 02/13] fix(protocol): avoid invocation in Bridge message processing if calldata is "" and value is 0 (#18137) --- .../contracts/shared/bridge/Bridge.sol | 2 + .../protocol/test/genesis/data/genesis.json | 2 +- .../test/genesis/data/genesis_alloc.json | 2 +- .../genesis/data/genesis_storage_layout.json | 806 +++++++++--------- 4 files changed, 407 insertions(+), 405 deletions(-) diff --git a/packages/protocol/contracts/shared/bridge/Bridge.sol b/packages/protocol/contracts/shared/bridge/Bridge.sol index 3e67bad5cb..d160c5a743 100644 --- a/packages/protocol/contracts/shared/bridge/Bridge.sol +++ b/packages/protocol/contracts/shared/bridge/Bridge.sol @@ -496,6 +496,8 @@ contract Bridge is EssentialContract, IBridge { { assert(_message.from != address(this)); + if (_message.value == 0 && _message.data.length == 0) return true; + if (_gasLimit == 0) return false; _storeContext(_msgHash, _message.from, _message.srcChainId); diff --git a/packages/protocol/test/genesis/data/genesis.json b/packages/protocol/test/genesis/data/genesis.json index 6b1549bf7e..dd2018cf98 100644 --- a/packages/protocol/test/genesis/data/genesis.json +++ b/packages/protocol/test/genesis/data/genesis.json @@ -62,7 +62,7 @@ "storage": { "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" }, - "code": "0x60806040526004361061021d575f3560e01c806382b5e8891161011e578063b8acae0e116100a8578063e07baba61161006d578063e07baba61461066b578063e30c3978146106a8578063eefbf17e146106c5578063f09a4016146106eb578063f2fde38b1461070a575f5ffd5b8063b8acae0e146105af578063be880c81146105ce578063c012fa77146105e4578063d0496d6a14610603578063d1aaa5df1461064b575f5ffd5b80638e3881a9116100ee5780638e3881a9146104fe578063913b16cb1461053c5780639efc7a2e1461055b578063a730cdfb1461057a578063a86f9d9e14610590575f5ffd5b806382b5e8891461049a5780638456cb59146104b95780638abf6077146104cd5780638da5cb5b146104e1575f5ffd5b80633f4ba83a116101aa5780635c975abb1161016f5780635c975abb146103ff57806360620c6b1461041f578063715018a61461043e57806379ba5097146104525780637cbadfaa14610466575f5ffd5b80633f4ba83a14610381578063422770fa146103955780634f1ef286146103b957806352d1902d146103cc5780635862f6e1146103e0575f5ffd5b80633075db56116101f05780633075db56146102ad5780633659cfe6146102d15780633ab76e9f146102f05780633c6cf473146103275780633eb6b8cf14610362575f5ffd5b80630432873c14610221578063069489a2146102425780631bdb0037146102565780632035065e14610280575b5f5ffd5b34801561022c575f5ffd5b5061024061023b366004612f28565b610729565b005b34801561024d575f5ffd5b50610240610a27565b610269610264366004612f76565b610ade565b604051610277929190613102565b60405180910390f35b34801561028b575f5ffd5b5061029f61029a36600461311a565b610e94565b6040516102779291906131d7565b3480156102b8575f5ffd5b506102c1611354565b6040519015158152602001610277565b3480156102dc575f5ffd5b506102406102eb366004613226565b61136c565b3480156102fb575f5ffd5b5060975461030f906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b348015610332575f5ffd5b50610355610341366004613241565b60fc6020525f908152604090205460ff1681565b6040516102779190613258565b34801561036d575f5ffd5b5061030f61037c36600461327c565b611433565b34801561038c575f5ffd5b50610240611449565b3480156103a0575f5ffd5b506103ab62030d4081565b604051908152602001610277565b6102406103c736600461337f565b61145d565b3480156103d7575f5ffd5b506103ab611516565b3480156103eb575f5ffd5b506102c16103fa36600461311a565b6115c8565b34801561040a575f5ffd5b506102c160c954610100900460ff1660021490565b34801561042a575f5ffd5b506102c1610439366004612f76565b611633565b348015610449575f5ffd5b50610240611701565b34801561045d575f5ffd5b50610240611712565b348015610471575f5ffd5b50610485610480366004613241565b611789565b60405163ffffffff9091168152602001610277565b3480156104a5575f5ffd5b506102406104b4366004613226565b6117a7565b3480156104c4575f5ffd5b50610240611827565b3480156104d8575f5ffd5b5061030f61183a565b3480156104ec575f5ffd5b506033546001600160a01b031661030f565b348015610509575f5ffd5b5061051d6105183660046133cb565b611848565b6040805192151583526001600160a01b03909116602083015201610277565b348015610547575f5ffd5b50610240610556366004612f76565b611874565b348015610566575f5ffd5b5061024061057536600461311a565b611a63565b348015610585575f5ffd5b506104856201d4c081565b34801561059b575f5ffd5b5061030f6105aa3660046133e4565b611d67565b3480156105ba575f5ffd5b506102c16105c936600461311a565b611d73565b3480156105d9575f5ffd5b50610485620c350081565b3480156105ef575f5ffd5b506103ab6105fe366004613507565b611dd4565b34801561060e575f5ffd5b50610617611e03565b60408051825181526020808401516001600160a01b031690820152918101516001600160401b031690820152606001610277565b348015610656575f5ffd5b506103ab610665366004613241565b60031890565b348015610676575f5ffd5b5060c954610690906201000090046001600160401b031681565b6040516001600160401b039091168152602001610277565b3480156106b3575f5ffd5b506065546001600160a01b031661030f565b3480156106d0575f5ffd5b5060fb5461069090600160401b90046001600160401b031681565b3480156106f6575f5ffd5b50610240610705366004613538565b611eaa565b348015610715575f5ffd5b50610240610724366004613226565b611f71565b61073960e0830160c084016133cb565b46816001600160401b03161461076257604051631c6c777560e31b815260040160405180910390fd5b61077260a08401608085016133cb565b6001600160401b0381161580610790575046816001600160401b0316145b156107ae57604051631c6c777560e31b815260040160405180910390fd5b6107c260c954610100900460ff1660021490565b156107e05760405163bae6e2a960e01b815260040160405180910390fd5b60026107ee60c95460ff1690565b60ff160361080f5760405163dfc60d8560e01b815260040160405180910390fd5b6108196002611fe2565b5f6108266105fe86613564565b9050610833816001611ff8565b61084185610120013561204a565b61085e576040516335856fbd60e21b815260040160405180910390fd5b5f6108838661087e6d7369676e616c5f7365727669636560901b5f611d67565b6120eb565b156108ce576108c78661012001356188b860405180602001604052805f8152508960e00160208101906108b69190613226565b6001600160a01b03169291906121e2565b9050610948565b6108de606087016040880161356f565b63ffffffff1615806108ed5750845b801561091b5750610905610100870160e08801613226565b6001600160a01b0316336001600160a01b031614155b15610939576040516372b6e1c360e11b815260040160405180910390fd5b61094586835a5f61221f565b90505b801561095e57610959826002612316565b610a15565b84156109fc5761096f826003612316565b61098a6d7369676e616c5f7365727669636560901b5f611d67565b60405163019b28af60e61b81526003841860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af11580156109d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109f69190613588565b50610a15565b60405163161e3ead60e01b815260040160405180910390fd5b5050610a216001611fe2565b50505050565b610a2f6123d3565b5f54600290610100900460ff16158015610a4f57505f5460ff8083169116105b610a745760405162461bcd60e51b8152600401610a6b9061359f565b60405180910390fd5b5f805460fb805467ffffffffffffffff1916905560ff82815561010083815561ff001991851661ffff19909316831717169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820152610b4460c0840160a08501613226565b6001600160a01b038116610b6b5760405163538ba4f960e01b815260040160405180910390fd5b610b7c610100850160e08601613226565b6001600160a01b038116610ba35760405163538ba4f960e01b815260040160405180910390fd5b610bb360e0860160c087016133cb565b6001600160401b0381161580610bd1575046816001600160401b0316145b15610bef57604051631c6c777560e31b815260040160405180910390fd5b610c0360c954610100900460ff1660021490565b15610c215760405163bae6e2a960e01b815260040160405180910390fd5b6002610c2f60c95460ff1690565b60ff1603610c505760405163dfc60d8560e01b815260040160405180910390fd5b610c5a6002611fe2565b610c6a606087016040880161356f565b63ffffffff165f03610cb257610c8660408701602088016133cb565b6001600160401b031615610cad5760405163c9f5178760e01b815260040160405180910390fd5b610cda565b610cbb8661242d565b5f03610cda576040516308c2ad5360e01b815260040160405180910390fd5b5f610cee61051860e0890160c08a016133cb565b50905080610d0f57604051631c6c777560e31b815260040160405180910390fd5b34610d206040890160208a016133cb565b610d38906001600160401b03166101208a0135613601565b14610d5657604051634ac2abdf60e11b815260040160405180910390fd5b610d5f87613564565b60fb8054919650600160401b9091046001600160401b0316906008610d8383613614565b82546101009290920a6001600160401b03818102199093169183160217909155908116865233606087015246166080860152610dbe85611dd4565b9550857fe33fd33b4f45b95b1c196242240c5b5233129d724b578f95b66ce8d8aae9351786604051610df0919061363e565b60405180910390a2610e136d7369676e616c5f7365727669636560901b5f611d67565b6001600160a01b03166366ca2bc0876040518263ffffffff1660e01b8152600401610e4091815260200190565b6020604051808303815f875af1158015610e5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e809190613588565b5050610e8c6001611fe2565b505050915091565b5f5f610eaa60c954610100900460ff1660021490565b15610ec85760405163bae6e2a960e01b815260040160405180910390fd5b6002610ed660c95460ff1690565b60ff1603610ef75760405163dfc60d8560e01b815260040160405180910390fd5b610f016002611fe2565b5f5a905046610f1660e0880160c089016133cb565b6001600160401b031614610f3d57604051631c6c777560e31b815260040160405180910390fd5b610f4d60a08701608088016133cb565b6001600160401b03161580610f79575046610f6e60a08801608089016133cb565b6001600160401b0316145b15610f9757604051631c6c777560e31b815260040160405180910390fd5b604080516080810182525f808252602082018190529181018290526060810191909152610fcb610100880160e08901613226565b6001600160a01b031633148015606083015261103a57610ff1606088016040890161356f565b63ffffffff165f03611016576040516372b6e1c360e11b815260040160405180910390fd5b62030d4085111561103a57604051631e3b03c960e01b815260040160405180910390fd5b5f6110476105fe89613564565b9050611053815f611ff8565b5f61106f6d7369676e616c5f7365727669636560901b5f611d67565b63ffffffff881660208501529050611099818361109260a08d0160808e016133cb565b8b8b612480565b63ffffffff166040808501919091526110d8906110bb908b0160208c016133cb565b6110d3906001600160401b03166101208c0135613601565b61204a565b6110f5576040516335856fbd60e21b815260040160405180910390fd5b5f6111008a836120eb565b1561111957506002955060019450610120890135611160565b5f8460600151611129575a611132565b6111328b61242d565b90506111448b8583886060015161221f565b1561115557600297505f965061115e565b60019750600296505b505b61117060408b0160208c016133cb565b6001600160401b0316156112d15761118e60408b0160208c016133cb565b6111a1906001600160401b031682613601565b9050836060015180156111c857506111bf60608b0160408c0161356f565b63ffffffff1615155b156112d157604084015163ffffffff16614e20025a6112056111ee6101408e018e613650565b6020601f909101819004026101a00160041b919050565b63ffffffff9081168801919091036201d4c00181168087525f91839161122e9183919061252b16565b0390505f61124260608e0160408f0161356f565b63ffffffff168d602001602081019061125b91906133cb565b6001600160401b031683028161127357611273613699565b0490505f48830290505f6112b78f602001602081019061129391906133cb565b6001600160401b0316848410156112af5784840160011c6112b1565b845b90612540565b958690039590506112cb33826188b8612554565b50505050505b6112f9816188b86112e96101008e0160e08f01613226565b6001600160a01b03169190612554565b6113038388612316565b827f8580f507761043ecdd2bdca084d6fb0109150b3d9842d854d34e3dea6d69387d8b86604051611335929190613831565b60405180910390a2505050505061134c6001611fe2565b935093915050565b5f600261136360c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000011630036113b45760405162461bcd60e51b8152600401610a6b90613885565b7f00000000000000000000000001670000000000000000000000000000000000016001600160a01b03166113e6612597565b6001600160a01b03161461140c5760405162461bcd60e51b8152600401610a6b906138d1565b611415816125b2565b604080515f80825260208201909252611430918391906125ba565b50565b5f61143f848484612724565b90505b9392505050565b611451612776565b61145b335f612806565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000011630036114a55760405162461bcd60e51b8152600401610a6b90613885565b7f00000000000000000000000001670000000000000000000000000000000000016001600160a01b03166114d7612597565b6001600160a01b0316146114fd5760405162461bcd60e51b8152600401610a6b906138d1565b611506826125b2565b611512828260016125ba565b5050565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000000000116146115b55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610a6b565b505f516020613aeb5f395f51905f525b90565b5f466115da60a08601608087016133cb565b6001600160401b0316146115ef57505f611442565b61143f61160d6d7369676e616c5f7365727669636560901b5f611d67565b61161c6106656105fe88613564565b61162c60e0880160c089016133cb565b86866128b3565b5f4661164560a08401608085016133cb565b6001600160401b03161461165a57505f919050565b6116756d7369676e616c5f7365727669636560901b5f611d67565b6001600160a01b03166332676bc6306116906105fe86613564565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156116d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116fb919061391d565b92915050565b6117096123d3565b61145b5f612935565b60655433906001600160a01b031681146117805760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a6b565b61143081612935565b5f6116fb620c35006101a06020601f8601819004020160041b613938565b806001600160a01b0381166117cf5760405163538ba4f960e01b815260040160405180910390fd5b6040516317066a5760e21b81523060048201526001600160a01b03831690635c19a95c906024015f604051808303815f87803b15801561180d575f5ffd5b505af115801561181f573d5f5f3e3d5ffd5b505050505050565b61182f61294e565b61145b336001612806565b5f611843612597565b905090565b5f5f61185f836562726964676560d01b6001611433565b6001600160a01b038116151594909350915050565b61188460e0820160c083016133cb565b46816001600160401b0316146118ad57604051631c6c777560e31b815260040160405180910390fd5b6118bd60a08301608084016133cb565b6001600160401b03811615806118db575046816001600160401b0316145b156118f957604051631c6c777560e31b815260040160405180910390fd5b61190d60c954610100900460ff1660021490565b1561192b5760405163bae6e2a960e01b815260040160405180910390fd5b600261193960c95460ff1690565b60ff160361195a5760405163dfc60d8560e01b815260040160405180910390fd5b6119646002611fe2565b611975610100840160e08501613226565b6001600160a01b0316336001600160a01b0316146119a6576040516372b6e1c360e11b815260040160405180910390fd5b5f6119b36105fe85613564565b90506119c0816001611ff8565b6119cb816003612316565b6119e66d7369676e616c5f7365727669636560901b5f611d67565b60405163019b28af60e61b81526003831860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af1158015611a2e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a529190613588565b5050611a5e6001611fe2565b505050565b611a7360a08401608085016133cb565b46816001600160401b031614611a9c57604051631c6c777560e31b815260040160405180910390fd5b611aac60e0850160c086016133cb565b6001600160401b0381161580611aca575046816001600160401b0316145b15611ae857604051631c6c777560e31b815260040160405180910390fd5b611afc60c954610100900460ff1660021490565b15611b1a5760405163bae6e2a960e01b815260040160405180910390fd5b6002611b2860c95460ff1690565b60ff1603611b495760405163dfc60d8560e01b815260040160405180910390fd5b611b536002611fe2565b5f611b606105fe87613564565b9050611b6c815f611ff8565b5f611b886d7369676e616c5f7365727669636560901b5f611d67565b604051631933b5e360e11b8152306004820152602481018490529091506001600160a01b038216906332676bc690604401602060405180830381865afa158015611bd4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf8919061391d565b611c155760405163ab035ad560e01b815260040160405180910390fd5b611c348160038418611c2d60e08b0160c08c016133cb565b8989612480565b50611c40826004612316565b611c4e87610120013561204a565b611c6b576040516335856fbd60e21b815260040160405180910390fd5b611c9462bc399d60e11b611c8560808a0160608b01613226565b6001600160a01b0316906129bf565b15611d3857611cb38230611cae60a08b0160808c016133cb565b612a4c565b611cc36080880160608901613226565b6001600160a01b0316630178733a88610120013589856040518463ffffffff1660e01b8152600401611cf6929190613954565b5f604051808303818588803b158015611d0d575f5ffd5b505af1158015611d1f573d5f5f3e3d5ffd5b5050505050611d335f195f1b5f1980612a4c565b611d54565b611d546101208801356188b86112e960c08b0160a08c01613226565b5050611d606001611fe2565b5050505050565b5f611442468484612724565b5f46611d8560e0860160c087016133cb565b6001600160401b031614611d9a57505f611442565b61143f611db86d7369676e616c5f7365727669636560901b5f611d67565b611dc46105fe87613564565b61162c60a08801608089016133cb565b5f81604051602001611de69190613975565b604051602081830303815290604052805190602001209050919050565b604080516060810182525f8082526020820181905291810191909152611e7a604080516060810182525f8082526020820181905291810191909152506040805160608101825260fd54815260fe546001600160a01b0381166020830152600160a01b90046001600160401b03169181019190915290565b80519091501580611e8c575080515f19145b156115c557604051635ceed17360e01b815260040160405180910390fd5b5f54610100900460ff1615808015611ec857505f54600160ff909116105b80611ee15750303b158015611ee157505f5460ff166001145b611efd5760405162461bcd60e51b8152600401610a6b9061359f565b5f805460ff191660011790558015611f1e575f805461ff0019166101001790555b611f288383612aa1565b8015611a5e575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b611f796123d3565b606580546001600160a01b0383166001600160a01b03199091168117909155611faa6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b80600481111561200a5761200a6131af565b5f83815260fc602052604090205460ff16600481111561202c5761202c6131af565b14611512576040516319d893ad60e21b815260040160405180910390fd5b5f5f6120676c38bab7ba30afb6b0b730b3b2b960991b6001611d67565b90506001600160a01b0381166120805750600192915050565b6040516315c638fb60e31b81525f6004820152602481018490526001600160a01b0382169063ae31c7d8906044015f604051808303815f87803b1580156120c5575f5ffd5b505af19250505080156120d6575060015b6120e257505f92915050565b50600192915050565b5f806120ff61012085016101008601613226565b6001600160a01b031603612115575060016116fb565b3061212861012085016101008601613226565b6001600160a01b03160361213e575060016116fb565b6001600160a01b03821661215a61012085016101008601613226565b6001600160a01b031603612170575060016116fb565b6004612180610140850185613650565b9050101580156121b75750637f07c94760e01b6121a1610140850185613650565b6121aa916139ab565b6001600160e01b03191614155b801561144257506114426121d361012085016101008601613226565b6001600160a01b03163b151590565b5f6001600160a01b03851661220a57604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b5f306122316080870160608801613226565b6001600160a01b031603612247576122476139e3565b825f0361225557505f61230e565b612279846122696080880160608901613226565b611cae60a0890160808a016133cb565b5f61228c61012087016101008801613226565b90506101208601355f6122a3610140890189613650565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525084519495509384935083925090506020850186888cf194505a905085156122fd576122fd8188612adb565b6123095f198080612a4c565b505050505b949350505050565b806004811115612328576123286131af565b5f83815260fc602052604090205460ff16600481111561234a5761234a6131af565b03612368576040516319d893ad60e21b815260040160405180910390fd5b5f82815260fc60205260409020805482919060ff19166001836004811115612392576123926131af565b0217905550817f6c51882bc2ed67617f77a1e9b9a25d2caad8448647ecb093b357a603b2575634826040516123c79190613258565b60405180910390a25050565b6033546001600160a01b0316331461145b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a6b565b5f80612447612440610140850185613650565b9050611789565b63ffffffff16905080612478612463606086016040870161356f565b63ffffffff168361252b90919063ffffffff16565b039392505050565b5f856001600160a01b031663910af6ed856124a5876562726964676560d01b5f611433565b8887876040518663ffffffff1660e01b81526004016124c89594939291906139f7565b6020604051808303815f875af1925050508015612502575060408051601f3d908101601f191682019092526124ff91810190613588565b60015b61251f576040516314504c7360e31b815260040160405180910390fd5b90505b95945050505050565b5f8183116125395781611442565b5090919050565b5f81831161254e5782611442565b50919050565b815f0361256057505050565b61257a83838360405180602001604052805f8152506121e2565b611a5e57604051634c67134d60e11b815260040160405180910390fd5b5f516020613aeb5f395f51905f52546001600160a01b031690565b6114306123d3565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156125ed57611a5e83612aef565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612647575060408051601f3d908101601f1916820190925261264491810190613588565b60015b6126aa5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a6b565b5f516020613aeb5f395f51905f5281146127185760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a6b565b50611a5e838383612b8a565b5f61272f8484612bae565b90508115801561274657506001600160a01b038116155b1561144257604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610a6b565b61278a60c954610100900460ff1660021490565b6127a75760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6033546001600160a01b038381169116148061284e57506128396d636861696e5f7761746368646f6760901b6001611d67565b6001600160a01b0316826001600160a01b0316145b15612857575050565b808015612891575061287c6e6272696467655f7761746368646f6760881b6001611d67565b6001600160a01b0316826001600160a01b0316145b1561289a575050565b604051630d85cccf60e11b815260040160405180910390fd5b5f856001600160a01b031663ce9d0820856128d8876562726964676560d01b5f611433565b8887876040518663ffffffff1660e01b81526004016128fb9594939291906139f7565b5f6040518083038186803b158015612911575f5ffd5b505afa925050508015612922575060015b61292d57505f612522565b506001612522565b606580546001600160a01b031916905561143081612c50565b61296260c954610100900460ff1660021490565b156129805760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016127fc565b5f6001600160a01b0383163b6129d657505f6116fb565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015612a40575060408051601f3d908101601f19168201909252612a3d9181019061391d565b60015b156116fb579392505050565b604080516060810182528481526001600160a01b03909316602084018190526001600160401b03909216920182905260fd9290925560fe8054600160a01b9092026001600160e01b0319909216909217179055565b806001600160a01b038116612ac95760405163538ba4f960e01b815260040160405180910390fd5b612ad283612ca1565b611a5e82612cff565b612ae6603f82613a38565b82101561151257fe5b6001600160a01b0381163b612b5c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a6b565b5f516020613aeb5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b612b9383612d6f565b5f82511180612b9f5750805b15611a5e57610a218383612dae565b6097545f906001600160a01b031680612bda57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015612c2c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061230e9190613a57565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16612cc75760405162461bcd60e51b8152600401610a6b90613a72565b612ccf612dd3565b612ced6001600160a01b03821615612ce75781612935565b33612935565b5060c9805461ff001916610100179055565b5f54610100900460ff16612d255760405162461bcd60e51b8152600401610a6b90613a72565b6001600160401b03461115612d4d5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b612d7881612aef565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606114428383604051806060016040528060278152602001613b0b60279139612df9565b5f54610100900460ff1661145b5760405162461bcd60e51b8152600401610a6b90613a72565b60605f5f856001600160a01b031685604051612e159190613abd565b5f60405180830381855af49150503d805f8114612e4d576040519150601f19603f3d011682016040523d82523d5f602084013e612e52565b606091505b5091509150612e6386838387612e6d565b9695505050505050565b60608315612edb5782515f03612ed4576001600160a01b0385163b612ed45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a6b565b508161230e565b61230e8383815115612ef05781518083602001fd5b8060405162461bcd60e51b8152600401610a6b9190613ad8565b5f610160828403121561254e575f5ffd5b8015158114611430575f5ffd5b5f5f60408385031215612f39575f5ffd5b82356001600160401b03811115612f4e575f5ffd5b612f5a85828601612f0a565b9250506020830135612f6b81612f1b565b809150509250929050565b5f60208284031215612f86575f5ffd5b81356001600160401b03811115612f9b575f5ffd5b61230e84828501612f0a565b5f5b83811015612fc1578181015183820152602001612fa9565b50505f910152565b5f8151808452612fe0816020860160208601612fa7565b601f01601f19169290920160200192915050565b80516001600160401b031682525f602082015161301c60208501826001600160401b03169052565b506040820151613034604085018263ffffffff169052565b50606082015161304f60608501826001600160a01b03169052565b50608082015161306a60808501826001600160401b03169052565b5060a082015161308560a08501826001600160a01b03169052565b5060c08201516130a060c08501826001600160401b03169052565b5060e08201516130bb60e08501826001600160a01b03169052565b506101008201516130d86101008501826001600160a01b03169052565b5061012082015161012084015261014082015161016061014085015261230e610160850182612fc9565b828152604060208201525f61143f6040830184612ff4565b5f5f5f6040848603121561312c575f5ffd5b83356001600160401b03811115613141575f5ffd5b61314d86828701612f0a565b93505060208401356001600160401b03811115613168575f5ffd5b8401601f81018613613178575f5ffd5b80356001600160401b0381111561318d575f5ffd5b86602082840101111561319e575f5ffd5b939660209190910195509293505050565b634e487b7160e01b5f52602160045260245ffd5b600581106131d3576131d36131af565b9052565b604081016131e582856131c3565b600483106131f5576131f56131af565b8260208301529392505050565b6001600160a01b0381168114611430575f5ffd5b803561322181613202565b919050565b5f60208284031215613236575f5ffd5b813561144281613202565b5f60208284031215613251575f5ffd5b5035919050565b602081016116fb82846131c3565b80356001600160401b0381168114613221575f5ffd5b5f5f5f6060848603121561328e575f5ffd5b61329784613266565b92506020840135915060408401356132ae81612f1b565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b03811182821017156132f0576132f06132b9565b60405290565b5f82601f830112613305575f5ffd5b81356001600160401b0381111561331e5761331e6132b9565b604051601f8201601f19908116603f011681016001600160401b038111828210171561334c5761334c6132b9565b604052818152838201602001851015613363575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215613390575f5ffd5b823561339b81613202565b915060208301356001600160401b038111156133b5575f5ffd5b6133c1858286016132f6565b9150509250929050565b5f602082840312156133db575f5ffd5b61144282613266565b5f5f604083850312156133f5575f5ffd5b823591506020830135612f6b81612f1b565b803563ffffffff81168114613221575f5ffd5b5f610160828403121561342b575f5ffd5b6134336132cd565b905061343e82613266565b815261344c60208301613266565b602082015261345d60408301613407565b604082015261346e60608301613216565b606082015261347f60808301613266565b608082015261349060a08301613216565b60a08201526134a160c08301613266565b60c08201526134b260e08301613216565b60e08201526134c46101008301613216565b61010082015261012082810135908201526101408201356001600160401b038111156134ee575f5ffd5b6134fa848285016132f6565b6101408301525092915050565b5f60208284031215613517575f5ffd5b81356001600160401b0381111561352c575f5ffd5b61230e8482850161341a565b5f5f60408385031215613549575f5ffd5b823561355481613202565b91506020830135612f6b81613202565b5f6116fb368361341a565b5f6020828403121561357f575f5ffd5b61144282613407565b5f60208284031215613598575f5ffd5b5051919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156116fb576116fb6135ed565b5f6001600160401b0382166001600160401b038103613635576136356135ed565b60010192915050565b602081525f6114426020830184612ff4565b5f5f8335601e19843603018112613665575f5ffd5b8301803591506001600160401b0382111561367e575f5ffd5b602001915036819003821315613692575f5ffd5b9250929050565b634e487b7160e01b5f52601260045260245ffd5b5f5f8335601e198436030181126136c2575f5ffd5b83016020810192503590506001600160401b038111156136e0575f5ffd5b803603821315613692575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6137308261372383613266565b6001600160401b03169052565b5f61373d60208301613266565b6001600160401b0316602084015261375760408301613407565b63ffffffff16604084015261376e60608301613216565b6001600160a01b0316606084015261378860808301613266565b6001600160401b031660808401526137a260a08301613216565b6001600160a01b031660a08401526137bc60c08301613266565b6001600160401b031660c08401526137d660e08301613216565b6001600160a01b031660e08401526137f16101008301613216565b6001600160a01b031661010084015261012082810135908401526138196101408301836136ad565b610160610140860152612522610160860182846136ee565b60a081525f61384360a0830185613716565b905063ffffffff835116602083015263ffffffff602084015116604083015263ffffffff60408401511660608301526060830151151560808301529392505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f6020828403121561392d575f5ffd5b815161144281612f1b565b63ffffffff81811683821601908111156116fb576116fb6135ed565b604081525f6139666040830185613716565b90508260208301529392505050565b60408152600d60408201526c5441494b4f5f4d45535341474560981b6060820152608060208201525f6114426080830184612ff4565b80356001600160e01b031981169060048410156139dc576001600160e01b0319600485900360031b81901b82161691505b5092915050565b634e487b7160e01b5f52600160045260245ffd5b6001600160401b038616815260018060a01b0385166020820152836040820152608060608201525f613a2d6080830184866136ee565b979650505050505050565b5f82613a5257634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613a67575f5ffd5b815161144281613202565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f8251613ace818460208701612fa7565b9190910192915050565b602081525f6114426020830184612fc956fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220fe7f47dabd46879b9404e8d06f7ee77f2c51d0391f21575037dda2b3e15ccfb164736f6c634300081b0033", + "code": "0x60806040526004361061021d575f3560e01c806382b5e8891161011e578063b8acae0e116100a8578063e07baba61161006d578063e07baba61461066b578063e30c3978146106a8578063eefbf17e146106c5578063f09a4016146106eb578063f2fde38b1461070a575f5ffd5b8063b8acae0e146105af578063be880c81146105ce578063c012fa77146105e4578063d0496d6a14610603578063d1aaa5df1461064b575f5ffd5b80638e3881a9116100ee5780638e3881a9146104fe578063913b16cb1461053c5780639efc7a2e1461055b578063a730cdfb1461057a578063a86f9d9e14610590575f5ffd5b806382b5e8891461049a5780638456cb59146104b95780638abf6077146104cd5780638da5cb5b146104e1575f5ffd5b80633f4ba83a116101aa5780635c975abb1161016f5780635c975abb146103ff57806360620c6b1461041f578063715018a61461043e57806379ba5097146104525780637cbadfaa14610466575f5ffd5b80633f4ba83a14610381578063422770fa146103955780634f1ef286146103b957806352d1902d146103cc5780635862f6e1146103e0575f5ffd5b80633075db56116101f05780633075db56146102ad5780633659cfe6146102d15780633ab76e9f146102f05780633c6cf473146103275780633eb6b8cf14610362575f5ffd5b80630432873c14610221578063069489a2146102425780631bdb0037146102565780632035065e14610280575b5f5ffd5b34801561022c575f5ffd5b5061024061023b366004612f67565b610729565b005b34801561024d575f5ffd5b50610240610a27565b610269610264366004612fb5565b610ade565b604051610277929190613141565b60405180910390f35b34801561028b575f5ffd5b5061029f61029a366004613159565b610e94565b604051610277929190613216565b3480156102b8575f5ffd5b506102c1611344565b6040519015158152602001610277565b3480156102dc575f5ffd5b506102406102eb366004613265565b61135c565b3480156102fb575f5ffd5b5060975461030f906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b348015610332575f5ffd5b50610355610341366004613280565b60fc6020525f908152604090205460ff1681565b6040516102779190613297565b34801561036d575f5ffd5b5061030f61037c3660046132bb565b611423565b34801561038c575f5ffd5b50610240611439565b3480156103a0575f5ffd5b506103ab62030d4081565b604051908152602001610277565b6102406103c73660046133be565b61144d565b3480156103d7575f5ffd5b506103ab611506565b3480156103eb575f5ffd5b506102c16103fa366004613159565b6115b8565b34801561040a575f5ffd5b506102c160c954610100900460ff1660021490565b34801561042a575f5ffd5b506102c1610439366004612fb5565b611623565b348015610449575f5ffd5b506102406116f1565b34801561045d575f5ffd5b50610240611702565b348015610471575f5ffd5b50610485610480366004613280565b611779565b60405163ffffffff9091168152602001610277565b3480156104a5575f5ffd5b506102406104b4366004613265565b611791565b3480156104c4575f5ffd5b50610240611811565b3480156104d8575f5ffd5b5061030f611824565b3480156104ec575f5ffd5b506033546001600160a01b031661030f565b348015610509575f5ffd5b5061051d61051836600461340a565b611832565b6040805192151583526001600160a01b03909116602083015201610277565b348015610547575f5ffd5b50610240610556366004612fb5565b61185e565b348015610566575f5ffd5b50610240610575366004613159565b611a4d565b348015610585575f5ffd5b506104856201d4c081565b34801561059b575f5ffd5b5061030f6105aa366004613423565b611d51565b3480156105ba575f5ffd5b506102c16105c9366004613159565b611d5d565b3480156105d9575f5ffd5b50610485620c350081565b3480156105ef575f5ffd5b506103ab6105fe366004613546565b611dbe565b34801561060e575f5ffd5b50610617611ded565b60408051825181526020808401516001600160a01b031690820152918101516001600160401b031690820152606001610277565b348015610656575f5ffd5b506103ab610665366004613280565b60031890565b348015610676575f5ffd5b5060c954610690906201000090046001600160401b031681565b6040516001600160401b039091168152602001610277565b3480156106b3575f5ffd5b506065546001600160a01b031661030f565b3480156106d0575f5ffd5b5060fb5461069090600160401b90046001600160401b031681565b3480156106f6575f5ffd5b50610240610705366004613577565b611e94565b348015610715575f5ffd5b50610240610724366004613265565b611f5b565b61073960e0830160c0840161340a565b46816001600160401b03161461076257604051631c6c777560e31b815260040160405180910390fd5b61077260a084016080850161340a565b6001600160401b0381161580610790575046816001600160401b0316145b156107ae57604051631c6c777560e31b815260040160405180910390fd5b6107c260c954610100900460ff1660021490565b156107e05760405163bae6e2a960e01b815260040160405180910390fd5b60026107ee60c95460ff1690565b60ff160361080f5760405163dfc60d8560e01b815260040160405180910390fd5b6108196002611fcc565b5f6108266105fe866135a3565b9050610833816001611fe2565b610841856101200135612034565b61085e576040516335856fbd60e21b815260040160405180910390fd5b5f6108838661087e6d7369676e616c5f7365727669636560901b5f611d51565b6120d5565b156108ce576108c78661012001356188b860405180602001604052805f8152508960e00160208101906108b69190613265565b6001600160a01b03169291906121cc565b9050610948565b6108de60608701604088016135ae565b63ffffffff1615806108ed5750845b801561091b5750610905610100870160e08801613265565b6001600160a01b0316336001600160a01b031614155b15610939576040516372b6e1c360e11b815260040160405180910390fd5b61094586835a5f612209565b90505b801561095e5761095982600261232d565b610a15565b84156109fc5761096f82600361232d565b61098a6d7369676e616c5f7365727669636560901b5f611d51565b60405163019b28af60e61b81526003841860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af11580156109d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109f691906135c7565b50610a15565b60405163161e3ead60e01b815260040160405180910390fd5b5050610a216001611fcc565b50505050565b610a2f6123ea565b5f54600290610100900460ff16158015610a4f57505f5460ff8083169116105b610a745760405162461bcd60e51b8152600401610a6b906135de565b60405180910390fd5b5f805460fb805467ffffffffffffffff1916905560ff82815561010083815561ff001991851661ffff19909316831717169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820152610b4460c0840160a08501613265565b6001600160a01b038116610b6b5760405163538ba4f960e01b815260040160405180910390fd5b610b7c610100850160e08601613265565b6001600160a01b038116610ba35760405163538ba4f960e01b815260040160405180910390fd5b610bb360e0860160c0870161340a565b6001600160401b0381161580610bd1575046816001600160401b0316145b15610bef57604051631c6c777560e31b815260040160405180910390fd5b610c0360c954610100900460ff1660021490565b15610c215760405163bae6e2a960e01b815260040160405180910390fd5b6002610c2f60c95460ff1690565b60ff1603610c505760405163dfc60d8560e01b815260040160405180910390fd5b610c5a6002611fcc565b610c6a60608701604088016135ae565b63ffffffff165f03610cb257610c86604087016020880161340a565b6001600160401b031615610cad5760405163c9f5178760e01b815260040160405180910390fd5b610cda565b610cbb86612444565b5f03610cda576040516308c2ad5360e01b815260040160405180910390fd5b5f610cee61051860e0890160c08a0161340a565b50905080610d0f57604051631c6c777560e31b815260040160405180910390fd5b34610d206040890160208a0161340a565b610d38906001600160401b03166101208a0135613640565b14610d5657604051634ac2abdf60e11b815260040160405180910390fd5b610d5f876135a3565b60fb8054919650600160401b9091046001600160401b0316906008610d8383613653565b82546101009290920a6001600160401b03818102199093169183160217909155908116865233606087015246166080860152610dbe85611dbe565b9550857fe33fd33b4f45b95b1c196242240c5b5233129d724b578f95b66ce8d8aae9351786604051610df0919061367d565b60405180910390a2610e136d7369676e616c5f7365727669636560901b5f611d51565b6001600160a01b03166366ca2bc0876040518263ffffffff1660e01b8152600401610e4091815260200190565b6020604051808303815f875af1158015610e5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8091906135c7565b5050610e8c6001611fcc565b505050915091565b5f5f610eaa60c954610100900460ff1660021490565b15610ec85760405163bae6e2a960e01b815260040160405180910390fd5b6002610ed660c95460ff1690565b60ff1603610ef75760405163dfc60d8560e01b815260040160405180910390fd5b610f016002611fcc565b5f5a905046610f1660e0880160c0890161340a565b6001600160401b031614610f3d57604051631c6c777560e31b815260040160405180910390fd5b610f4d60a087016080880161340a565b6001600160401b03161580610f79575046610f6e60a088016080890161340a565b6001600160401b0316145b15610f9757604051631c6c777560e31b815260040160405180910390fd5b604080516080810182525f808252602082018190529181018290526060810191909152610fcb610100880160e08901613265565b6001600160a01b031633148015606083015261103a57610ff160608801604089016135ae565b63ffffffff165f03611016576040516372b6e1c360e11b815260040160405180910390fd5b62030d4085111561103a57604051631e3b03c960e01b815260040160405180910390fd5b5f6110476105fe896135a3565b9050611053815f611fe2565b5f61106f6d7369676e616c5f7365727669636560901b5f611d51565b63ffffffff881660208501529050611099818361109260a08d0160808e0161340a565b8b8b612497565b63ffffffff166040808501919091526110d8906110bb908b0160208c0161340a565b6110d3906001600160401b03166101208c0135613640565b612034565b6110f5576040516335856fbd60e21b815260040160405180910390fd5b5f6111008a836120d5565b1561111957506002955060019450610120890135611160565b5f8460600151611129575a611132565b6111328b612444565b90506111448b85838860600151612209565b1561115557600297505f965061115e565b60019750600296505b505b61117060408b0160208c0161340a565b6001600160401b0316156112c15761118e60408b0160208c0161340a565b6111a1906001600160401b031682613640565b9050836060015180156111c857506111bf60608b0160408c016135ae565b63ffffffff1615155b156112c157604084015163ffffffff16614e20025a6111f56111ee6101408e018e61368f565b9050612542565b63ffffffff9081168801919091036201d4c00181168087525f91839161121e9183919061256a16565b0390505f61123260608e0160408f016135ae565b63ffffffff168d602001602081019061124b919061340a565b6001600160401b0316830281611263576112636136d8565b0490505f48830290505f6112a78f6020016020810190611283919061340a565b6001600160401b03168484101561129f5784840160011c6112a1565b845b9061257f565b958690039590506112bb33826188b8612593565b50505050505b6112e9816188b86112d96101008e0160e08f01613265565b6001600160a01b03169190612593565b6112f3838861232d565b827f8580f507761043ecdd2bdca084d6fb0109150b3d9842d854d34e3dea6d69387d8b86604051611325929190613870565b60405180910390a2505050505061133c6001611fcc565b935093915050565b5f600261135360c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000011630036113a45760405162461bcd60e51b8152600401610a6b906138c4565b7f00000000000000000000000001670000000000000000000000000000000000016001600160a01b03166113d66125d6565b6001600160a01b0316146113fc5760405162461bcd60e51b8152600401610a6b90613910565b611405816125f1565b604080515f80825260208201909252611420918391906125f9565b50565b5f61142f848484612763565b90505b9392505050565b6114416127b5565b61144b335f612845565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000011630036114955760405162461bcd60e51b8152600401610a6b906138c4565b7f00000000000000000000000001670000000000000000000000000000000000016001600160a01b03166114c76125d6565b6001600160a01b0316146114ed5760405162461bcd60e51b8152600401610a6b90613910565b6114f6826125f1565b611502828260016125f9565b5050565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000000000116146115a55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610a6b565b505f516020613b2a5f395f51905f525b90565b5f466115ca60a086016080870161340a565b6001600160401b0316146115df57505f611432565b61142f6115fd6d7369676e616c5f7365727669636560901b5f611d51565b61160c6106656105fe886135a3565b61161c60e0880160c0890161340a565b86866128f2565b5f4661163560a084016080850161340a565b6001600160401b03161461164a57505f919050565b6116656d7369676e616c5f7365727669636560901b5f611d51565b6001600160a01b03166332676bc6306116806105fe866135a3565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156116c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116eb919061395c565b92915050565b6116f96123ea565b61144b5f612974565b60655433906001600160a01b031681146117705760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a6b565b61142081612974565b5f620c350061178783612542565b6116eb9190613977565b806001600160a01b0381166117b95760405163538ba4f960e01b815260040160405180910390fd5b6040516317066a5760e21b81523060048201526001600160a01b03831690635c19a95c906024015f604051808303815f87803b1580156117f7575f5ffd5b505af1158015611809573d5f5f3e3d5ffd5b505050505050565b61181961298d565b61144b336001612845565b5f61182d6125d6565b905090565b5f5f611849836562726964676560d01b6001611423565b6001600160a01b038116151594909350915050565b61186e60e0820160c0830161340a565b46816001600160401b03161461189757604051631c6c777560e31b815260040160405180910390fd5b6118a760a083016080840161340a565b6001600160401b03811615806118c5575046816001600160401b0316145b156118e357604051631c6c777560e31b815260040160405180910390fd5b6118f760c954610100900460ff1660021490565b156119155760405163bae6e2a960e01b815260040160405180910390fd5b600261192360c95460ff1690565b60ff16036119445760405163dfc60d8560e01b815260040160405180910390fd5b61194e6002611fcc565b61195f610100840160e08501613265565b6001600160a01b0316336001600160a01b031614611990576040516372b6e1c360e11b815260040160405180910390fd5b5f61199d6105fe856135a3565b90506119aa816001611fe2565b6119b581600361232d565b6119d06d7369676e616c5f7365727669636560901b5f611d51565b60405163019b28af60e61b81526003831860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af1158015611a18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a3c91906135c7565b5050611a486001611fcc565b505050565b611a5d60a084016080850161340a565b46816001600160401b031614611a8657604051631c6c777560e31b815260040160405180910390fd5b611a9660e0850160c0860161340a565b6001600160401b0381161580611ab4575046816001600160401b0316145b15611ad257604051631c6c777560e31b815260040160405180910390fd5b611ae660c954610100900460ff1660021490565b15611b045760405163bae6e2a960e01b815260040160405180910390fd5b6002611b1260c95460ff1690565b60ff1603611b335760405163dfc60d8560e01b815260040160405180910390fd5b611b3d6002611fcc565b5f611b4a6105fe876135a3565b9050611b56815f611fe2565b5f611b726d7369676e616c5f7365727669636560901b5f611d51565b604051631933b5e360e11b8152306004820152602481018490529091506001600160a01b038216906332676bc690604401602060405180830381865afa158015611bbe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be2919061395c565b611bff5760405163ab035ad560e01b815260040160405180910390fd5b611c1e8160038418611c1760e08b0160c08c0161340a565b8989612497565b50611c2a82600461232d565b611c38876101200135612034565b611c55576040516335856fbd60e21b815260040160405180910390fd5b611c7e62bc399d60e11b611c6f60808a0160608b01613265565b6001600160a01b0316906129fe565b15611d2257611c9d8230611c9860a08b0160808c0161340a565b612a8b565b611cad6080880160608901613265565b6001600160a01b0316630178733a88610120013589856040518463ffffffff1660e01b8152600401611ce0929190613993565b5f604051808303818588803b158015611cf7575f5ffd5b505af1158015611d09573d5f5f3e3d5ffd5b5050505050611d1d5f195f1b5f1980612a8b565b611d3e565b611d3e6101208801356188b86112d960c08b0160a08c01613265565b5050611d4a6001611fcc565b5050505050565b5f611432468484612763565b5f46611d6f60e0860160c0870161340a565b6001600160401b031614611d8457505f611432565b61142f611da26d7369676e616c5f7365727669636560901b5f611d51565b611dae6105fe876135a3565b61161c60a088016080890161340a565b5f81604051602001611dd091906139b4565b604051602081830303815290604052805190602001209050919050565b604080516060810182525f8082526020820181905291810191909152611e64604080516060810182525f8082526020820181905291810191909152506040805160608101825260fd54815260fe546001600160a01b0381166020830152600160a01b90046001600160401b03169181019190915290565b80519091501580611e76575080515f19145b156115b557604051635ceed17360e01b815260040160405180910390fd5b5f54610100900460ff1615808015611eb257505f54600160ff909116105b80611ecb5750303b158015611ecb57505f5460ff166001145b611ee75760405162461bcd60e51b8152600401610a6b906135de565b5f805460ff191660011790558015611f08575f805461ff0019166101001790555b611f128383612ae0565b8015611a48575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b611f636123ea565b606580546001600160a01b0383166001600160a01b03199091168117909155611f946033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b806004811115611ff457611ff46131ee565b5f83815260fc602052604090205460ff166004811115612016576120166131ee565b14611502576040516319d893ad60e21b815260040160405180910390fd5b5f5f6120516c38bab7ba30afb6b0b730b3b2b960991b6001611d51565b90506001600160a01b03811661206a5750600192915050565b6040516315c638fb60e31b81525f6004820152602481018490526001600160a01b0382169063ae31c7d8906044015f604051808303815f87803b1580156120af575f5ffd5b505af19250505080156120c0575060015b6120cc57505f92915050565b50600192915050565b5f806120e961012085016101008601613265565b6001600160a01b0316036120ff575060016116eb565b3061211261012085016101008601613265565b6001600160a01b031603612128575060016116eb565b6001600160a01b03821661214461012085016101008601613265565b6001600160a01b03160361215a575060016116eb565b600461216a61014085018561368f565b9050101580156121a15750637f07c94760e01b61218b61014085018561368f565b612194916139ea565b6001600160e01b03191614155b801561143257506114326121bd61012085016101008601613265565b6001600160a01b03163b151590565b5f6001600160a01b0385166121f457604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b5f3061221b6080870160608801613265565b6001600160a01b03160361223157612231613a22565b610120850135158015612251575061224d61014086018661368f565b1590505b1561225e57506001612325565b825f0361226c57505f612325565b612290846122806080880160608901613265565b611c9860a0890160808a0161340a565b5f6122a361012087016101008801613265565b90506101208601355f6122ba61014089018961368f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525084519495509384935083925090506020850186888cf194505a90508515612314576123148188612b1a565b6123205f198080612a8b565b505050505b949350505050565b80600481111561233f5761233f6131ee565b5f83815260fc602052604090205460ff166004811115612361576123616131ee565b0361237f576040516319d893ad60e21b815260040160405180910390fd5b5f82815260fc60205260409020805482919060ff191660018360048111156123a9576123a96131ee565b0217905550817f6c51882bc2ed67617f77a1e9b9a25d2caad8448647ecb093b357a603b2575634826040516123de9190613297565b60405180910390a25050565b6033546001600160a01b0316331461144b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a6b565b5f8061245e61245761014085018561368f565b9050611779565b63ffffffff1690508061248f61247a60608601604087016135ae565b63ffffffff168361256a90919063ffffffff16565b039392505050565b5f856001600160a01b031663910af6ed856124bc876562726964676560d01b5f611423565b8887876040518663ffffffff1660e01b81526004016124df959493929190613a36565b6020604051808303815f875af1925050508015612519575060408051601f3d908101601f19168201909252612516918101906135c7565b60015b612536576040516314504c7360e31b815260040160405180910390fd5b90505b95945050505050565b5f815f0361255157505f919050565b60046020601f8401046020026101a001901b9050919050565b5f8183116125785781611432565b5090919050565b5f81831161258d5782611432565b50919050565b815f0361259f57505050565b6125b983838360405180602001604052805f8152506121cc565b611a4857604051634c67134d60e11b815260040160405180910390fd5b5f516020613b2a5f395f51905f52546001600160a01b031690565b6114206123ea565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561262c57611a4883612b2e565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612686575060408051601f3d908101601f19168201909252612683918101906135c7565b60015b6126e95760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a6b565b5f516020613b2a5f395f51905f5281146127575760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a6b565b50611a48838383612bc9565b5f61276e8484612bed565b90508115801561278557506001600160a01b038116155b1561143257604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610a6b565b6127c960c954610100900460ff1660021490565b6127e65760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6033546001600160a01b038381169116148061288d57506128786d636861696e5f7761746368646f6760901b6001611d51565b6001600160a01b0316826001600160a01b0316145b15612896575050565b8080156128d057506128bb6e6272696467655f7761746368646f6760881b6001611d51565b6001600160a01b0316826001600160a01b0316145b156128d9575050565b604051630d85cccf60e11b815260040160405180910390fd5b5f856001600160a01b031663ce9d082085612917876562726964676560d01b5f611423565b8887876040518663ffffffff1660e01b815260040161293a959493929190613a36565b5f6040518083038186803b158015612950575f5ffd5b505afa925050508015612961575060015b61296c57505f612539565b506001612539565b606580546001600160a01b031916905561142081612c8f565b6129a160c954610100900460ff1660021490565b156129bf5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589060200161283b565b5f6001600160a01b0383163b612a1557505f6116eb565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015612a7f575060408051601f3d908101601f19168201909252612a7c9181019061395c565b60015b156116eb579392505050565b604080516060810182528481526001600160a01b03909316602084018190526001600160401b03909216920182905260fd9290925560fe8054600160a01b9092026001600160e01b0319909216909217179055565b806001600160a01b038116612b085760405163538ba4f960e01b815260040160405180910390fd5b612b1183612ce0565b611a4882612d3e565b612b25603f82613a77565b82101561150257fe5b6001600160a01b0381163b612b9b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a6b565b5f516020613b2a5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b612bd283612dae565b5f82511180612bde5750805b15611a4857610a218383612ded565b6097545f906001600160a01b031680612c1957604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015612c6b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123259190613a96565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16612d065760405162461bcd60e51b8152600401610a6b90613ab1565b612d0e612e12565b612d2c6001600160a01b03821615612d265781612974565b33612974565b5060c9805461ff001916610100179055565b5f54610100900460ff16612d645760405162461bcd60e51b8152600401610a6b90613ab1565b6001600160401b03461115612d8c5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b612db781612b2e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606114328383604051806060016040528060278152602001613b4a60279139612e38565b5f54610100900460ff1661144b5760405162461bcd60e51b8152600401610a6b90613ab1565b60605f5f856001600160a01b031685604051612e549190613afc565b5f60405180830381855af49150503d805f8114612e8c576040519150601f19603f3d011682016040523d82523d5f602084013e612e91565b606091505b5091509150612ea286838387612eac565b9695505050505050565b60608315612f1a5782515f03612f13576001600160a01b0385163b612f135760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a6b565b5081612325565b6123258383815115612f2f5781518083602001fd5b8060405162461bcd60e51b8152600401610a6b9190613b17565b5f610160828403121561258d575f5ffd5b8015158114611420575f5ffd5b5f5f60408385031215612f78575f5ffd5b82356001600160401b03811115612f8d575f5ffd5b612f9985828601612f49565b9250506020830135612faa81612f5a565b809150509250929050565b5f60208284031215612fc5575f5ffd5b81356001600160401b03811115612fda575f5ffd5b61232584828501612f49565b5f5b83811015613000578181015183820152602001612fe8565b50505f910152565b5f815180845261301f816020860160208601612fe6565b601f01601f19169290920160200192915050565b80516001600160401b031682525f602082015161305b60208501826001600160401b03169052565b506040820151613073604085018263ffffffff169052565b50606082015161308e60608501826001600160a01b03169052565b5060808201516130a960808501826001600160401b03169052565b5060a08201516130c460a08501826001600160a01b03169052565b5060c08201516130df60c08501826001600160401b03169052565b5060e08201516130fa60e08501826001600160a01b03169052565b506101008201516131176101008501826001600160a01b03169052565b50610120820151610120840152610140820151610160610140850152612325610160850182613008565b828152604060208201525f61142f6040830184613033565b5f5f5f6040848603121561316b575f5ffd5b83356001600160401b03811115613180575f5ffd5b61318c86828701612f49565b93505060208401356001600160401b038111156131a7575f5ffd5b8401601f810186136131b7575f5ffd5b80356001600160401b038111156131cc575f5ffd5b8660208284010111156131dd575f5ffd5b939660209190910195509293505050565b634e487b7160e01b5f52602160045260245ffd5b60058110613212576132126131ee565b9052565b604081016132248285613202565b60048310613234576132346131ee565b8260208301529392505050565b6001600160a01b0381168114611420575f5ffd5b803561326081613241565b919050565b5f60208284031215613275575f5ffd5b813561143281613241565b5f60208284031215613290575f5ffd5b5035919050565b602081016116eb8284613202565b80356001600160401b0381168114613260575f5ffd5b5f5f5f606084860312156132cd575f5ffd5b6132d6846132a5565b92506020840135915060408401356132ed81612f5a565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b038111828210171561332f5761332f6132f8565b60405290565b5f82601f830112613344575f5ffd5b81356001600160401b0381111561335d5761335d6132f8565b604051601f8201601f19908116603f011681016001600160401b038111828210171561338b5761338b6132f8565b6040528181528382016020018510156133a2575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156133cf575f5ffd5b82356133da81613241565b915060208301356001600160401b038111156133f4575f5ffd5b61340085828601613335565b9150509250929050565b5f6020828403121561341a575f5ffd5b611432826132a5565b5f5f60408385031215613434575f5ffd5b823591506020830135612faa81612f5a565b803563ffffffff81168114613260575f5ffd5b5f610160828403121561346a575f5ffd5b61347261330c565b905061347d826132a5565b815261348b602083016132a5565b602082015261349c60408301613446565b60408201526134ad60608301613255565b60608201526134be608083016132a5565b60808201526134cf60a08301613255565b60a08201526134e060c083016132a5565b60c08201526134f160e08301613255565b60e08201526135036101008301613255565b61010082015261012082810135908201526101408201356001600160401b0381111561352d575f5ffd5b61353984828501613335565b6101408301525092915050565b5f60208284031215613556575f5ffd5b81356001600160401b0381111561356b575f5ffd5b61232584828501613459565b5f5f60408385031215613588575f5ffd5b823561359381613241565b91506020830135612faa81613241565b5f6116eb3683613459565b5f602082840312156135be575f5ffd5b61143282613446565b5f602082840312156135d7575f5ffd5b5051919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156116eb576116eb61362c565b5f6001600160401b0382166001600160401b0381036136745761367461362c565b60010192915050565b602081525f6114326020830184613033565b5f5f8335601e198436030181126136a4575f5ffd5b8301803591506001600160401b038211156136bd575f5ffd5b6020019150368190038213156136d1575f5ffd5b9250929050565b634e487b7160e01b5f52601260045260245ffd5b5f5f8335601e19843603018112613701575f5ffd5b83016020810192503590506001600160401b0381111561371f575f5ffd5b8036038213156136d1575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b61376f82613762836132a5565b6001600160401b03169052565b5f61377c602083016132a5565b6001600160401b0316602084015261379660408301613446565b63ffffffff1660408401526137ad60608301613255565b6001600160a01b031660608401526137c7608083016132a5565b6001600160401b031660808401526137e160a08301613255565b6001600160a01b031660a08401526137fb60c083016132a5565b6001600160401b031660c084015261381560e08301613255565b6001600160a01b031660e08401526138306101008301613255565b6001600160a01b031661010084015261012082810135908401526138586101408301836136ec565b6101606101408601526125396101608601828461372d565b60a081525f61388260a0830185613755565b905063ffffffff835116602083015263ffffffff602084015116604083015263ffffffff60408401511660608301526060830151151560808301529392505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f6020828403121561396c575f5ffd5b815161143281612f5a565b63ffffffff81811683821601908111156116eb576116eb61362c565b604081525f6139a56040830185613755565b90508260208301529392505050565b60408152600d60408201526c5441494b4f5f4d45535341474560981b6060820152608060208201525f6114326080830184613033565b80356001600160e01b03198116906004841015613a1b576001600160e01b0319600485900360031b81901b82161691505b5092915050565b634e487b7160e01b5f52600160045260245ffd5b6001600160401b038616815260018060a01b0385166020820152836040820152608060608201525f613a6c60808301848661372d565b979650505050505050565b5f82613a9157634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613aa6575f5ffd5b815161143281613241565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f8251613b0d818460208701612fe6565b9190910192915050565b602081525f611432602083018461300856fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206ccb67f04aaf63488576bbb651d54656794e2eac08c3401a79a0cda25cd7f6e664736f6c634300081b0033", "balance": "0x0" }, "0x1670000000000000000000000000000000000001": { diff --git a/packages/protocol/test/genesis/data/genesis_alloc.json b/packages/protocol/test/genesis/data/genesis_alloc.json index 31c8726254..f1a0cdd0d9 100644 --- a/packages/protocol/test/genesis/data/genesis_alloc.json +++ b/packages/protocol/test/genesis/data/genesis_alloc.json @@ -37,7 +37,7 @@ "storage": { "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" }, - "code": "0x60806040526004361061021d575f3560e01c806382b5e8891161011e578063b8acae0e116100a8578063e07baba61161006d578063e07baba61461066b578063e30c3978146106a8578063eefbf17e146106c5578063f09a4016146106eb578063f2fde38b1461070a575f5ffd5b8063b8acae0e146105af578063be880c81146105ce578063c012fa77146105e4578063d0496d6a14610603578063d1aaa5df1461064b575f5ffd5b80638e3881a9116100ee5780638e3881a9146104fe578063913b16cb1461053c5780639efc7a2e1461055b578063a730cdfb1461057a578063a86f9d9e14610590575f5ffd5b806382b5e8891461049a5780638456cb59146104b95780638abf6077146104cd5780638da5cb5b146104e1575f5ffd5b80633f4ba83a116101aa5780635c975abb1161016f5780635c975abb146103ff57806360620c6b1461041f578063715018a61461043e57806379ba5097146104525780637cbadfaa14610466575f5ffd5b80633f4ba83a14610381578063422770fa146103955780634f1ef286146103b957806352d1902d146103cc5780635862f6e1146103e0575f5ffd5b80633075db56116101f05780633075db56146102ad5780633659cfe6146102d15780633ab76e9f146102f05780633c6cf473146103275780633eb6b8cf14610362575f5ffd5b80630432873c14610221578063069489a2146102425780631bdb0037146102565780632035065e14610280575b5f5ffd5b34801561022c575f5ffd5b5061024061023b366004612f28565b610729565b005b34801561024d575f5ffd5b50610240610a27565b610269610264366004612f76565b610ade565b604051610277929190613102565b60405180910390f35b34801561028b575f5ffd5b5061029f61029a36600461311a565b610e94565b6040516102779291906131d7565b3480156102b8575f5ffd5b506102c1611354565b6040519015158152602001610277565b3480156102dc575f5ffd5b506102406102eb366004613226565b61136c565b3480156102fb575f5ffd5b5060975461030f906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b348015610332575f5ffd5b50610355610341366004613241565b60fc6020525f908152604090205460ff1681565b6040516102779190613258565b34801561036d575f5ffd5b5061030f61037c36600461327c565b611433565b34801561038c575f5ffd5b50610240611449565b3480156103a0575f5ffd5b506103ab62030d4081565b604051908152602001610277565b6102406103c736600461337f565b61145d565b3480156103d7575f5ffd5b506103ab611516565b3480156103eb575f5ffd5b506102c16103fa36600461311a565b6115c8565b34801561040a575f5ffd5b506102c160c954610100900460ff1660021490565b34801561042a575f5ffd5b506102c1610439366004612f76565b611633565b348015610449575f5ffd5b50610240611701565b34801561045d575f5ffd5b50610240611712565b348015610471575f5ffd5b50610485610480366004613241565b611789565b60405163ffffffff9091168152602001610277565b3480156104a5575f5ffd5b506102406104b4366004613226565b6117a7565b3480156104c4575f5ffd5b50610240611827565b3480156104d8575f5ffd5b5061030f61183a565b3480156104ec575f5ffd5b506033546001600160a01b031661030f565b348015610509575f5ffd5b5061051d6105183660046133cb565b611848565b6040805192151583526001600160a01b03909116602083015201610277565b348015610547575f5ffd5b50610240610556366004612f76565b611874565b348015610566575f5ffd5b5061024061057536600461311a565b611a63565b348015610585575f5ffd5b506104856201d4c081565b34801561059b575f5ffd5b5061030f6105aa3660046133e4565b611d67565b3480156105ba575f5ffd5b506102c16105c936600461311a565b611d73565b3480156105d9575f5ffd5b50610485620c350081565b3480156105ef575f5ffd5b506103ab6105fe366004613507565b611dd4565b34801561060e575f5ffd5b50610617611e03565b60408051825181526020808401516001600160a01b031690820152918101516001600160401b031690820152606001610277565b348015610656575f5ffd5b506103ab610665366004613241565b60031890565b348015610676575f5ffd5b5060c954610690906201000090046001600160401b031681565b6040516001600160401b039091168152602001610277565b3480156106b3575f5ffd5b506065546001600160a01b031661030f565b3480156106d0575f5ffd5b5060fb5461069090600160401b90046001600160401b031681565b3480156106f6575f5ffd5b50610240610705366004613538565b611eaa565b348015610715575f5ffd5b50610240610724366004613226565b611f71565b61073960e0830160c084016133cb565b46816001600160401b03161461076257604051631c6c777560e31b815260040160405180910390fd5b61077260a08401608085016133cb565b6001600160401b0381161580610790575046816001600160401b0316145b156107ae57604051631c6c777560e31b815260040160405180910390fd5b6107c260c954610100900460ff1660021490565b156107e05760405163bae6e2a960e01b815260040160405180910390fd5b60026107ee60c95460ff1690565b60ff160361080f5760405163dfc60d8560e01b815260040160405180910390fd5b6108196002611fe2565b5f6108266105fe86613564565b9050610833816001611ff8565b61084185610120013561204a565b61085e576040516335856fbd60e21b815260040160405180910390fd5b5f6108838661087e6d7369676e616c5f7365727669636560901b5f611d67565b6120eb565b156108ce576108c78661012001356188b860405180602001604052805f8152508960e00160208101906108b69190613226565b6001600160a01b03169291906121e2565b9050610948565b6108de606087016040880161356f565b63ffffffff1615806108ed5750845b801561091b5750610905610100870160e08801613226565b6001600160a01b0316336001600160a01b031614155b15610939576040516372b6e1c360e11b815260040160405180910390fd5b61094586835a5f61221f565b90505b801561095e57610959826002612316565b610a15565b84156109fc5761096f826003612316565b61098a6d7369676e616c5f7365727669636560901b5f611d67565b60405163019b28af60e61b81526003841860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af11580156109d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109f69190613588565b50610a15565b60405163161e3ead60e01b815260040160405180910390fd5b5050610a216001611fe2565b50505050565b610a2f6123d3565b5f54600290610100900460ff16158015610a4f57505f5460ff8083169116105b610a745760405162461bcd60e51b8152600401610a6b9061359f565b60405180910390fd5b5f805460fb805467ffffffffffffffff1916905560ff82815561010083815561ff001991851661ffff19909316831717169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820152610b4460c0840160a08501613226565b6001600160a01b038116610b6b5760405163538ba4f960e01b815260040160405180910390fd5b610b7c610100850160e08601613226565b6001600160a01b038116610ba35760405163538ba4f960e01b815260040160405180910390fd5b610bb360e0860160c087016133cb565b6001600160401b0381161580610bd1575046816001600160401b0316145b15610bef57604051631c6c777560e31b815260040160405180910390fd5b610c0360c954610100900460ff1660021490565b15610c215760405163bae6e2a960e01b815260040160405180910390fd5b6002610c2f60c95460ff1690565b60ff1603610c505760405163dfc60d8560e01b815260040160405180910390fd5b610c5a6002611fe2565b610c6a606087016040880161356f565b63ffffffff165f03610cb257610c8660408701602088016133cb565b6001600160401b031615610cad5760405163c9f5178760e01b815260040160405180910390fd5b610cda565b610cbb8661242d565b5f03610cda576040516308c2ad5360e01b815260040160405180910390fd5b5f610cee61051860e0890160c08a016133cb565b50905080610d0f57604051631c6c777560e31b815260040160405180910390fd5b34610d206040890160208a016133cb565b610d38906001600160401b03166101208a0135613601565b14610d5657604051634ac2abdf60e11b815260040160405180910390fd5b610d5f87613564565b60fb8054919650600160401b9091046001600160401b0316906008610d8383613614565b82546101009290920a6001600160401b03818102199093169183160217909155908116865233606087015246166080860152610dbe85611dd4565b9550857fe33fd33b4f45b95b1c196242240c5b5233129d724b578f95b66ce8d8aae9351786604051610df0919061363e565b60405180910390a2610e136d7369676e616c5f7365727669636560901b5f611d67565b6001600160a01b03166366ca2bc0876040518263ffffffff1660e01b8152600401610e4091815260200190565b6020604051808303815f875af1158015610e5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e809190613588565b5050610e8c6001611fe2565b505050915091565b5f5f610eaa60c954610100900460ff1660021490565b15610ec85760405163bae6e2a960e01b815260040160405180910390fd5b6002610ed660c95460ff1690565b60ff1603610ef75760405163dfc60d8560e01b815260040160405180910390fd5b610f016002611fe2565b5f5a905046610f1660e0880160c089016133cb565b6001600160401b031614610f3d57604051631c6c777560e31b815260040160405180910390fd5b610f4d60a08701608088016133cb565b6001600160401b03161580610f79575046610f6e60a08801608089016133cb565b6001600160401b0316145b15610f9757604051631c6c777560e31b815260040160405180910390fd5b604080516080810182525f808252602082018190529181018290526060810191909152610fcb610100880160e08901613226565b6001600160a01b031633148015606083015261103a57610ff1606088016040890161356f565b63ffffffff165f03611016576040516372b6e1c360e11b815260040160405180910390fd5b62030d4085111561103a57604051631e3b03c960e01b815260040160405180910390fd5b5f6110476105fe89613564565b9050611053815f611ff8565b5f61106f6d7369676e616c5f7365727669636560901b5f611d67565b63ffffffff881660208501529050611099818361109260a08d0160808e016133cb565b8b8b612480565b63ffffffff166040808501919091526110d8906110bb908b0160208c016133cb565b6110d3906001600160401b03166101208c0135613601565b61204a565b6110f5576040516335856fbd60e21b815260040160405180910390fd5b5f6111008a836120eb565b1561111957506002955060019450610120890135611160565b5f8460600151611129575a611132565b6111328b61242d565b90506111448b8583886060015161221f565b1561115557600297505f965061115e565b60019750600296505b505b61117060408b0160208c016133cb565b6001600160401b0316156112d15761118e60408b0160208c016133cb565b6111a1906001600160401b031682613601565b9050836060015180156111c857506111bf60608b0160408c0161356f565b63ffffffff1615155b156112d157604084015163ffffffff16614e20025a6112056111ee6101408e018e613650565b6020601f909101819004026101a00160041b919050565b63ffffffff9081168801919091036201d4c00181168087525f91839161122e9183919061252b16565b0390505f61124260608e0160408f0161356f565b63ffffffff168d602001602081019061125b91906133cb565b6001600160401b031683028161127357611273613699565b0490505f48830290505f6112b78f602001602081019061129391906133cb565b6001600160401b0316848410156112af5784840160011c6112b1565b845b90612540565b958690039590506112cb33826188b8612554565b50505050505b6112f9816188b86112e96101008e0160e08f01613226565b6001600160a01b03169190612554565b6113038388612316565b827f8580f507761043ecdd2bdca084d6fb0109150b3d9842d854d34e3dea6d69387d8b86604051611335929190613831565b60405180910390a2505050505061134c6001611fe2565b935093915050565b5f600261136360c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000011630036113b45760405162461bcd60e51b8152600401610a6b90613885565b7f00000000000000000000000001670000000000000000000000000000000000016001600160a01b03166113e6612597565b6001600160a01b03161461140c5760405162461bcd60e51b8152600401610a6b906138d1565b611415816125b2565b604080515f80825260208201909252611430918391906125ba565b50565b5f61143f848484612724565b90505b9392505050565b611451612776565b61145b335f612806565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000011630036114a55760405162461bcd60e51b8152600401610a6b90613885565b7f00000000000000000000000001670000000000000000000000000000000000016001600160a01b03166114d7612597565b6001600160a01b0316146114fd5760405162461bcd60e51b8152600401610a6b906138d1565b611506826125b2565b611512828260016125ba565b5050565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000000000116146115b55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610a6b565b505f516020613aeb5f395f51905f525b90565b5f466115da60a08601608087016133cb565b6001600160401b0316146115ef57505f611442565b61143f61160d6d7369676e616c5f7365727669636560901b5f611d67565b61161c6106656105fe88613564565b61162c60e0880160c089016133cb565b86866128b3565b5f4661164560a08401608085016133cb565b6001600160401b03161461165a57505f919050565b6116756d7369676e616c5f7365727669636560901b5f611d67565b6001600160a01b03166332676bc6306116906105fe86613564565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156116d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116fb919061391d565b92915050565b6117096123d3565b61145b5f612935565b60655433906001600160a01b031681146117805760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a6b565b61143081612935565b5f6116fb620c35006101a06020601f8601819004020160041b613938565b806001600160a01b0381166117cf5760405163538ba4f960e01b815260040160405180910390fd5b6040516317066a5760e21b81523060048201526001600160a01b03831690635c19a95c906024015f604051808303815f87803b15801561180d575f5ffd5b505af115801561181f573d5f5f3e3d5ffd5b505050505050565b61182f61294e565b61145b336001612806565b5f611843612597565b905090565b5f5f61185f836562726964676560d01b6001611433565b6001600160a01b038116151594909350915050565b61188460e0820160c083016133cb565b46816001600160401b0316146118ad57604051631c6c777560e31b815260040160405180910390fd5b6118bd60a08301608084016133cb565b6001600160401b03811615806118db575046816001600160401b0316145b156118f957604051631c6c777560e31b815260040160405180910390fd5b61190d60c954610100900460ff1660021490565b1561192b5760405163bae6e2a960e01b815260040160405180910390fd5b600261193960c95460ff1690565b60ff160361195a5760405163dfc60d8560e01b815260040160405180910390fd5b6119646002611fe2565b611975610100840160e08501613226565b6001600160a01b0316336001600160a01b0316146119a6576040516372b6e1c360e11b815260040160405180910390fd5b5f6119b36105fe85613564565b90506119c0816001611ff8565b6119cb816003612316565b6119e66d7369676e616c5f7365727669636560901b5f611d67565b60405163019b28af60e61b81526003831860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af1158015611a2e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a529190613588565b5050611a5e6001611fe2565b505050565b611a7360a08401608085016133cb565b46816001600160401b031614611a9c57604051631c6c777560e31b815260040160405180910390fd5b611aac60e0850160c086016133cb565b6001600160401b0381161580611aca575046816001600160401b0316145b15611ae857604051631c6c777560e31b815260040160405180910390fd5b611afc60c954610100900460ff1660021490565b15611b1a5760405163bae6e2a960e01b815260040160405180910390fd5b6002611b2860c95460ff1690565b60ff1603611b495760405163dfc60d8560e01b815260040160405180910390fd5b611b536002611fe2565b5f611b606105fe87613564565b9050611b6c815f611ff8565b5f611b886d7369676e616c5f7365727669636560901b5f611d67565b604051631933b5e360e11b8152306004820152602481018490529091506001600160a01b038216906332676bc690604401602060405180830381865afa158015611bd4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf8919061391d565b611c155760405163ab035ad560e01b815260040160405180910390fd5b611c348160038418611c2d60e08b0160c08c016133cb565b8989612480565b50611c40826004612316565b611c4e87610120013561204a565b611c6b576040516335856fbd60e21b815260040160405180910390fd5b611c9462bc399d60e11b611c8560808a0160608b01613226565b6001600160a01b0316906129bf565b15611d3857611cb38230611cae60a08b0160808c016133cb565b612a4c565b611cc36080880160608901613226565b6001600160a01b0316630178733a88610120013589856040518463ffffffff1660e01b8152600401611cf6929190613954565b5f604051808303818588803b158015611d0d575f5ffd5b505af1158015611d1f573d5f5f3e3d5ffd5b5050505050611d335f195f1b5f1980612a4c565b611d54565b611d546101208801356188b86112e960c08b0160a08c01613226565b5050611d606001611fe2565b5050505050565b5f611442468484612724565b5f46611d8560e0860160c087016133cb565b6001600160401b031614611d9a57505f611442565b61143f611db86d7369676e616c5f7365727669636560901b5f611d67565b611dc46105fe87613564565b61162c60a08801608089016133cb565b5f81604051602001611de69190613975565b604051602081830303815290604052805190602001209050919050565b604080516060810182525f8082526020820181905291810191909152611e7a604080516060810182525f8082526020820181905291810191909152506040805160608101825260fd54815260fe546001600160a01b0381166020830152600160a01b90046001600160401b03169181019190915290565b80519091501580611e8c575080515f19145b156115c557604051635ceed17360e01b815260040160405180910390fd5b5f54610100900460ff1615808015611ec857505f54600160ff909116105b80611ee15750303b158015611ee157505f5460ff166001145b611efd5760405162461bcd60e51b8152600401610a6b9061359f565b5f805460ff191660011790558015611f1e575f805461ff0019166101001790555b611f288383612aa1565b8015611a5e575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b611f796123d3565b606580546001600160a01b0383166001600160a01b03199091168117909155611faa6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b80600481111561200a5761200a6131af565b5f83815260fc602052604090205460ff16600481111561202c5761202c6131af565b14611512576040516319d893ad60e21b815260040160405180910390fd5b5f5f6120676c38bab7ba30afb6b0b730b3b2b960991b6001611d67565b90506001600160a01b0381166120805750600192915050565b6040516315c638fb60e31b81525f6004820152602481018490526001600160a01b0382169063ae31c7d8906044015f604051808303815f87803b1580156120c5575f5ffd5b505af19250505080156120d6575060015b6120e257505f92915050565b50600192915050565b5f806120ff61012085016101008601613226565b6001600160a01b031603612115575060016116fb565b3061212861012085016101008601613226565b6001600160a01b03160361213e575060016116fb565b6001600160a01b03821661215a61012085016101008601613226565b6001600160a01b031603612170575060016116fb565b6004612180610140850185613650565b9050101580156121b75750637f07c94760e01b6121a1610140850185613650565b6121aa916139ab565b6001600160e01b03191614155b801561144257506114426121d361012085016101008601613226565b6001600160a01b03163b151590565b5f6001600160a01b03851661220a57604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b5f306122316080870160608801613226565b6001600160a01b031603612247576122476139e3565b825f0361225557505f61230e565b612279846122696080880160608901613226565b611cae60a0890160808a016133cb565b5f61228c61012087016101008801613226565b90506101208601355f6122a3610140890189613650565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525084519495509384935083925090506020850186888cf194505a905085156122fd576122fd8188612adb565b6123095f198080612a4c565b505050505b949350505050565b806004811115612328576123286131af565b5f83815260fc602052604090205460ff16600481111561234a5761234a6131af565b03612368576040516319d893ad60e21b815260040160405180910390fd5b5f82815260fc60205260409020805482919060ff19166001836004811115612392576123926131af565b0217905550817f6c51882bc2ed67617f77a1e9b9a25d2caad8448647ecb093b357a603b2575634826040516123c79190613258565b60405180910390a25050565b6033546001600160a01b0316331461145b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a6b565b5f80612447612440610140850185613650565b9050611789565b63ffffffff16905080612478612463606086016040870161356f565b63ffffffff168361252b90919063ffffffff16565b039392505050565b5f856001600160a01b031663910af6ed856124a5876562726964676560d01b5f611433565b8887876040518663ffffffff1660e01b81526004016124c89594939291906139f7565b6020604051808303815f875af1925050508015612502575060408051601f3d908101601f191682019092526124ff91810190613588565b60015b61251f576040516314504c7360e31b815260040160405180910390fd5b90505b95945050505050565b5f8183116125395781611442565b5090919050565b5f81831161254e5782611442565b50919050565b815f0361256057505050565b61257a83838360405180602001604052805f8152506121e2565b611a5e57604051634c67134d60e11b815260040160405180910390fd5b5f516020613aeb5f395f51905f52546001600160a01b031690565b6114306123d3565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156125ed57611a5e83612aef565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612647575060408051601f3d908101601f1916820190925261264491810190613588565b60015b6126aa5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a6b565b5f516020613aeb5f395f51905f5281146127185760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a6b565b50611a5e838383612b8a565b5f61272f8484612bae565b90508115801561274657506001600160a01b038116155b1561144257604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610a6b565b61278a60c954610100900460ff1660021490565b6127a75760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6033546001600160a01b038381169116148061284e57506128396d636861696e5f7761746368646f6760901b6001611d67565b6001600160a01b0316826001600160a01b0316145b15612857575050565b808015612891575061287c6e6272696467655f7761746368646f6760881b6001611d67565b6001600160a01b0316826001600160a01b0316145b1561289a575050565b604051630d85cccf60e11b815260040160405180910390fd5b5f856001600160a01b031663ce9d0820856128d8876562726964676560d01b5f611433565b8887876040518663ffffffff1660e01b81526004016128fb9594939291906139f7565b5f6040518083038186803b158015612911575f5ffd5b505afa925050508015612922575060015b61292d57505f612522565b506001612522565b606580546001600160a01b031916905561143081612c50565b61296260c954610100900460ff1660021490565b156129805760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016127fc565b5f6001600160a01b0383163b6129d657505f6116fb565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015612a40575060408051601f3d908101601f19168201909252612a3d9181019061391d565b60015b156116fb579392505050565b604080516060810182528481526001600160a01b03909316602084018190526001600160401b03909216920182905260fd9290925560fe8054600160a01b9092026001600160e01b0319909216909217179055565b806001600160a01b038116612ac95760405163538ba4f960e01b815260040160405180910390fd5b612ad283612ca1565b611a5e82612cff565b612ae6603f82613a38565b82101561151257fe5b6001600160a01b0381163b612b5c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a6b565b5f516020613aeb5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b612b9383612d6f565b5f82511180612b9f5750805b15611a5e57610a218383612dae565b6097545f906001600160a01b031680612bda57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015612c2c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061230e9190613a57565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16612cc75760405162461bcd60e51b8152600401610a6b90613a72565b612ccf612dd3565b612ced6001600160a01b03821615612ce75781612935565b33612935565b5060c9805461ff001916610100179055565b5f54610100900460ff16612d255760405162461bcd60e51b8152600401610a6b90613a72565b6001600160401b03461115612d4d5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b612d7881612aef565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606114428383604051806060016040528060278152602001613b0b60279139612df9565b5f54610100900460ff1661145b5760405162461bcd60e51b8152600401610a6b90613a72565b60605f5f856001600160a01b031685604051612e159190613abd565b5f60405180830381855af49150503d805f8114612e4d576040519150601f19603f3d011682016040523d82523d5f602084013e612e52565b606091505b5091509150612e6386838387612e6d565b9695505050505050565b60608315612edb5782515f03612ed4576001600160a01b0385163b612ed45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a6b565b508161230e565b61230e8383815115612ef05781518083602001fd5b8060405162461bcd60e51b8152600401610a6b9190613ad8565b5f610160828403121561254e575f5ffd5b8015158114611430575f5ffd5b5f5f60408385031215612f39575f5ffd5b82356001600160401b03811115612f4e575f5ffd5b612f5a85828601612f0a565b9250506020830135612f6b81612f1b565b809150509250929050565b5f60208284031215612f86575f5ffd5b81356001600160401b03811115612f9b575f5ffd5b61230e84828501612f0a565b5f5b83811015612fc1578181015183820152602001612fa9565b50505f910152565b5f8151808452612fe0816020860160208601612fa7565b601f01601f19169290920160200192915050565b80516001600160401b031682525f602082015161301c60208501826001600160401b03169052565b506040820151613034604085018263ffffffff169052565b50606082015161304f60608501826001600160a01b03169052565b50608082015161306a60808501826001600160401b03169052565b5060a082015161308560a08501826001600160a01b03169052565b5060c08201516130a060c08501826001600160401b03169052565b5060e08201516130bb60e08501826001600160a01b03169052565b506101008201516130d86101008501826001600160a01b03169052565b5061012082015161012084015261014082015161016061014085015261230e610160850182612fc9565b828152604060208201525f61143f6040830184612ff4565b5f5f5f6040848603121561312c575f5ffd5b83356001600160401b03811115613141575f5ffd5b61314d86828701612f0a565b93505060208401356001600160401b03811115613168575f5ffd5b8401601f81018613613178575f5ffd5b80356001600160401b0381111561318d575f5ffd5b86602082840101111561319e575f5ffd5b939660209190910195509293505050565b634e487b7160e01b5f52602160045260245ffd5b600581106131d3576131d36131af565b9052565b604081016131e582856131c3565b600483106131f5576131f56131af565b8260208301529392505050565b6001600160a01b0381168114611430575f5ffd5b803561322181613202565b919050565b5f60208284031215613236575f5ffd5b813561144281613202565b5f60208284031215613251575f5ffd5b5035919050565b602081016116fb82846131c3565b80356001600160401b0381168114613221575f5ffd5b5f5f5f6060848603121561328e575f5ffd5b61329784613266565b92506020840135915060408401356132ae81612f1b565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b03811182821017156132f0576132f06132b9565b60405290565b5f82601f830112613305575f5ffd5b81356001600160401b0381111561331e5761331e6132b9565b604051601f8201601f19908116603f011681016001600160401b038111828210171561334c5761334c6132b9565b604052818152838201602001851015613363575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215613390575f5ffd5b823561339b81613202565b915060208301356001600160401b038111156133b5575f5ffd5b6133c1858286016132f6565b9150509250929050565b5f602082840312156133db575f5ffd5b61144282613266565b5f5f604083850312156133f5575f5ffd5b823591506020830135612f6b81612f1b565b803563ffffffff81168114613221575f5ffd5b5f610160828403121561342b575f5ffd5b6134336132cd565b905061343e82613266565b815261344c60208301613266565b602082015261345d60408301613407565b604082015261346e60608301613216565b606082015261347f60808301613266565b608082015261349060a08301613216565b60a08201526134a160c08301613266565b60c08201526134b260e08301613216565b60e08201526134c46101008301613216565b61010082015261012082810135908201526101408201356001600160401b038111156134ee575f5ffd5b6134fa848285016132f6565b6101408301525092915050565b5f60208284031215613517575f5ffd5b81356001600160401b0381111561352c575f5ffd5b61230e8482850161341a565b5f5f60408385031215613549575f5ffd5b823561355481613202565b91506020830135612f6b81613202565b5f6116fb368361341a565b5f6020828403121561357f575f5ffd5b61144282613407565b5f60208284031215613598575f5ffd5b5051919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156116fb576116fb6135ed565b5f6001600160401b0382166001600160401b038103613635576136356135ed565b60010192915050565b602081525f6114426020830184612ff4565b5f5f8335601e19843603018112613665575f5ffd5b8301803591506001600160401b0382111561367e575f5ffd5b602001915036819003821315613692575f5ffd5b9250929050565b634e487b7160e01b5f52601260045260245ffd5b5f5f8335601e198436030181126136c2575f5ffd5b83016020810192503590506001600160401b038111156136e0575f5ffd5b803603821315613692575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6137308261372383613266565b6001600160401b03169052565b5f61373d60208301613266565b6001600160401b0316602084015261375760408301613407565b63ffffffff16604084015261376e60608301613216565b6001600160a01b0316606084015261378860808301613266565b6001600160401b031660808401526137a260a08301613216565b6001600160a01b031660a08401526137bc60c08301613266565b6001600160401b031660c08401526137d660e08301613216565b6001600160a01b031660e08401526137f16101008301613216565b6001600160a01b031661010084015261012082810135908401526138196101408301836136ad565b610160610140860152612522610160860182846136ee565b60a081525f61384360a0830185613716565b905063ffffffff835116602083015263ffffffff602084015116604083015263ffffffff60408401511660608301526060830151151560808301529392505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f6020828403121561392d575f5ffd5b815161144281612f1b565b63ffffffff81811683821601908111156116fb576116fb6135ed565b604081525f6139666040830185613716565b90508260208301529392505050565b60408152600d60408201526c5441494b4f5f4d45535341474560981b6060820152608060208201525f6114426080830184612ff4565b80356001600160e01b031981169060048410156139dc576001600160e01b0319600485900360031b81901b82161691505b5092915050565b634e487b7160e01b5f52600160045260245ffd5b6001600160401b038616815260018060a01b0385166020820152836040820152608060608201525f613a2d6080830184866136ee565b979650505050505050565b5f82613a5257634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613a67575f5ffd5b815161144281613202565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f8251613ace818460208701612fa7565b9190910192915050565b602081525f6114426020830184612fc956fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220fe7f47dabd46879b9404e8d06f7ee77f2c51d0391f21575037dda2b3e15ccfb164736f6c634300081b0033", + "code": "0x60806040526004361061021d575f3560e01c806382b5e8891161011e578063b8acae0e116100a8578063e07baba61161006d578063e07baba61461066b578063e30c3978146106a8578063eefbf17e146106c5578063f09a4016146106eb578063f2fde38b1461070a575f5ffd5b8063b8acae0e146105af578063be880c81146105ce578063c012fa77146105e4578063d0496d6a14610603578063d1aaa5df1461064b575f5ffd5b80638e3881a9116100ee5780638e3881a9146104fe578063913b16cb1461053c5780639efc7a2e1461055b578063a730cdfb1461057a578063a86f9d9e14610590575f5ffd5b806382b5e8891461049a5780638456cb59146104b95780638abf6077146104cd5780638da5cb5b146104e1575f5ffd5b80633f4ba83a116101aa5780635c975abb1161016f5780635c975abb146103ff57806360620c6b1461041f578063715018a61461043e57806379ba5097146104525780637cbadfaa14610466575f5ffd5b80633f4ba83a14610381578063422770fa146103955780634f1ef286146103b957806352d1902d146103cc5780635862f6e1146103e0575f5ffd5b80633075db56116101f05780633075db56146102ad5780633659cfe6146102d15780633ab76e9f146102f05780633c6cf473146103275780633eb6b8cf14610362575f5ffd5b80630432873c14610221578063069489a2146102425780631bdb0037146102565780632035065e14610280575b5f5ffd5b34801561022c575f5ffd5b5061024061023b366004612f67565b610729565b005b34801561024d575f5ffd5b50610240610a27565b610269610264366004612fb5565b610ade565b604051610277929190613141565b60405180910390f35b34801561028b575f5ffd5b5061029f61029a366004613159565b610e94565b604051610277929190613216565b3480156102b8575f5ffd5b506102c1611344565b6040519015158152602001610277565b3480156102dc575f5ffd5b506102406102eb366004613265565b61135c565b3480156102fb575f5ffd5b5060975461030f906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b348015610332575f5ffd5b50610355610341366004613280565b60fc6020525f908152604090205460ff1681565b6040516102779190613297565b34801561036d575f5ffd5b5061030f61037c3660046132bb565b611423565b34801561038c575f5ffd5b50610240611439565b3480156103a0575f5ffd5b506103ab62030d4081565b604051908152602001610277565b6102406103c73660046133be565b61144d565b3480156103d7575f5ffd5b506103ab611506565b3480156103eb575f5ffd5b506102c16103fa366004613159565b6115b8565b34801561040a575f5ffd5b506102c160c954610100900460ff1660021490565b34801561042a575f5ffd5b506102c1610439366004612fb5565b611623565b348015610449575f5ffd5b506102406116f1565b34801561045d575f5ffd5b50610240611702565b348015610471575f5ffd5b50610485610480366004613280565b611779565b60405163ffffffff9091168152602001610277565b3480156104a5575f5ffd5b506102406104b4366004613265565b611791565b3480156104c4575f5ffd5b50610240611811565b3480156104d8575f5ffd5b5061030f611824565b3480156104ec575f5ffd5b506033546001600160a01b031661030f565b348015610509575f5ffd5b5061051d61051836600461340a565b611832565b6040805192151583526001600160a01b03909116602083015201610277565b348015610547575f5ffd5b50610240610556366004612fb5565b61185e565b348015610566575f5ffd5b50610240610575366004613159565b611a4d565b348015610585575f5ffd5b506104856201d4c081565b34801561059b575f5ffd5b5061030f6105aa366004613423565b611d51565b3480156105ba575f5ffd5b506102c16105c9366004613159565b611d5d565b3480156105d9575f5ffd5b50610485620c350081565b3480156105ef575f5ffd5b506103ab6105fe366004613546565b611dbe565b34801561060e575f5ffd5b50610617611ded565b60408051825181526020808401516001600160a01b031690820152918101516001600160401b031690820152606001610277565b348015610656575f5ffd5b506103ab610665366004613280565b60031890565b348015610676575f5ffd5b5060c954610690906201000090046001600160401b031681565b6040516001600160401b039091168152602001610277565b3480156106b3575f5ffd5b506065546001600160a01b031661030f565b3480156106d0575f5ffd5b5060fb5461069090600160401b90046001600160401b031681565b3480156106f6575f5ffd5b50610240610705366004613577565b611e94565b348015610715575f5ffd5b50610240610724366004613265565b611f5b565b61073960e0830160c0840161340a565b46816001600160401b03161461076257604051631c6c777560e31b815260040160405180910390fd5b61077260a084016080850161340a565b6001600160401b0381161580610790575046816001600160401b0316145b156107ae57604051631c6c777560e31b815260040160405180910390fd5b6107c260c954610100900460ff1660021490565b156107e05760405163bae6e2a960e01b815260040160405180910390fd5b60026107ee60c95460ff1690565b60ff160361080f5760405163dfc60d8560e01b815260040160405180910390fd5b6108196002611fcc565b5f6108266105fe866135a3565b9050610833816001611fe2565b610841856101200135612034565b61085e576040516335856fbd60e21b815260040160405180910390fd5b5f6108838661087e6d7369676e616c5f7365727669636560901b5f611d51565b6120d5565b156108ce576108c78661012001356188b860405180602001604052805f8152508960e00160208101906108b69190613265565b6001600160a01b03169291906121cc565b9050610948565b6108de60608701604088016135ae565b63ffffffff1615806108ed5750845b801561091b5750610905610100870160e08801613265565b6001600160a01b0316336001600160a01b031614155b15610939576040516372b6e1c360e11b815260040160405180910390fd5b61094586835a5f612209565b90505b801561095e5761095982600261232d565b610a15565b84156109fc5761096f82600361232d565b61098a6d7369676e616c5f7365727669636560901b5f611d51565b60405163019b28af60e61b81526003841860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af11580156109d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109f691906135c7565b50610a15565b60405163161e3ead60e01b815260040160405180910390fd5b5050610a216001611fcc565b50505050565b610a2f6123ea565b5f54600290610100900460ff16158015610a4f57505f5460ff8083169116105b610a745760405162461bcd60e51b8152600401610a6b906135de565b60405180910390fd5b5f805460fb805467ffffffffffffffff1916905560ff82815561010083815561ff001991851661ffff19909316831717169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820152610b4460c0840160a08501613265565b6001600160a01b038116610b6b5760405163538ba4f960e01b815260040160405180910390fd5b610b7c610100850160e08601613265565b6001600160a01b038116610ba35760405163538ba4f960e01b815260040160405180910390fd5b610bb360e0860160c0870161340a565b6001600160401b0381161580610bd1575046816001600160401b0316145b15610bef57604051631c6c777560e31b815260040160405180910390fd5b610c0360c954610100900460ff1660021490565b15610c215760405163bae6e2a960e01b815260040160405180910390fd5b6002610c2f60c95460ff1690565b60ff1603610c505760405163dfc60d8560e01b815260040160405180910390fd5b610c5a6002611fcc565b610c6a60608701604088016135ae565b63ffffffff165f03610cb257610c86604087016020880161340a565b6001600160401b031615610cad5760405163c9f5178760e01b815260040160405180910390fd5b610cda565b610cbb86612444565b5f03610cda576040516308c2ad5360e01b815260040160405180910390fd5b5f610cee61051860e0890160c08a0161340a565b50905080610d0f57604051631c6c777560e31b815260040160405180910390fd5b34610d206040890160208a0161340a565b610d38906001600160401b03166101208a0135613640565b14610d5657604051634ac2abdf60e11b815260040160405180910390fd5b610d5f876135a3565b60fb8054919650600160401b9091046001600160401b0316906008610d8383613653565b82546101009290920a6001600160401b03818102199093169183160217909155908116865233606087015246166080860152610dbe85611dbe565b9550857fe33fd33b4f45b95b1c196242240c5b5233129d724b578f95b66ce8d8aae9351786604051610df0919061367d565b60405180910390a2610e136d7369676e616c5f7365727669636560901b5f611d51565b6001600160a01b03166366ca2bc0876040518263ffffffff1660e01b8152600401610e4091815260200190565b6020604051808303815f875af1158015610e5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8091906135c7565b5050610e8c6001611fcc565b505050915091565b5f5f610eaa60c954610100900460ff1660021490565b15610ec85760405163bae6e2a960e01b815260040160405180910390fd5b6002610ed660c95460ff1690565b60ff1603610ef75760405163dfc60d8560e01b815260040160405180910390fd5b610f016002611fcc565b5f5a905046610f1660e0880160c0890161340a565b6001600160401b031614610f3d57604051631c6c777560e31b815260040160405180910390fd5b610f4d60a087016080880161340a565b6001600160401b03161580610f79575046610f6e60a088016080890161340a565b6001600160401b0316145b15610f9757604051631c6c777560e31b815260040160405180910390fd5b604080516080810182525f808252602082018190529181018290526060810191909152610fcb610100880160e08901613265565b6001600160a01b031633148015606083015261103a57610ff160608801604089016135ae565b63ffffffff165f03611016576040516372b6e1c360e11b815260040160405180910390fd5b62030d4085111561103a57604051631e3b03c960e01b815260040160405180910390fd5b5f6110476105fe896135a3565b9050611053815f611fe2565b5f61106f6d7369676e616c5f7365727669636560901b5f611d51565b63ffffffff881660208501529050611099818361109260a08d0160808e0161340a565b8b8b612497565b63ffffffff166040808501919091526110d8906110bb908b0160208c0161340a565b6110d3906001600160401b03166101208c0135613640565b612034565b6110f5576040516335856fbd60e21b815260040160405180910390fd5b5f6111008a836120d5565b1561111957506002955060019450610120890135611160565b5f8460600151611129575a611132565b6111328b612444565b90506111448b85838860600151612209565b1561115557600297505f965061115e565b60019750600296505b505b61117060408b0160208c0161340a565b6001600160401b0316156112c15761118e60408b0160208c0161340a565b6111a1906001600160401b031682613640565b9050836060015180156111c857506111bf60608b0160408c016135ae565b63ffffffff1615155b156112c157604084015163ffffffff16614e20025a6111f56111ee6101408e018e61368f565b9050612542565b63ffffffff9081168801919091036201d4c00181168087525f91839161121e9183919061256a16565b0390505f61123260608e0160408f016135ae565b63ffffffff168d602001602081019061124b919061340a565b6001600160401b0316830281611263576112636136d8565b0490505f48830290505f6112a78f6020016020810190611283919061340a565b6001600160401b03168484101561129f5784840160011c6112a1565b845b9061257f565b958690039590506112bb33826188b8612593565b50505050505b6112e9816188b86112d96101008e0160e08f01613265565b6001600160a01b03169190612593565b6112f3838861232d565b827f8580f507761043ecdd2bdca084d6fb0109150b3d9842d854d34e3dea6d69387d8b86604051611325929190613870565b60405180910390a2505050505061133c6001611fcc565b935093915050565b5f600261135360c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000011630036113a45760405162461bcd60e51b8152600401610a6b906138c4565b7f00000000000000000000000001670000000000000000000000000000000000016001600160a01b03166113d66125d6565b6001600160a01b0316146113fc5760405162461bcd60e51b8152600401610a6b90613910565b611405816125f1565b604080515f80825260208201909252611420918391906125f9565b50565b5f61142f848484612763565b90505b9392505050565b6114416127b5565b61144b335f612845565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000011630036114955760405162461bcd60e51b8152600401610a6b906138c4565b7f00000000000000000000000001670000000000000000000000000000000000016001600160a01b03166114c76125d6565b6001600160a01b0316146114ed5760405162461bcd60e51b8152600401610a6b90613910565b6114f6826125f1565b611502828260016125f9565b5050565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000000000116146115a55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610a6b565b505f516020613b2a5f395f51905f525b90565b5f466115ca60a086016080870161340a565b6001600160401b0316146115df57505f611432565b61142f6115fd6d7369676e616c5f7365727669636560901b5f611d51565b61160c6106656105fe886135a3565b61161c60e0880160c0890161340a565b86866128f2565b5f4661163560a084016080850161340a565b6001600160401b03161461164a57505f919050565b6116656d7369676e616c5f7365727669636560901b5f611d51565b6001600160a01b03166332676bc6306116806105fe866135a3565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156116c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116eb919061395c565b92915050565b6116f96123ea565b61144b5f612974565b60655433906001600160a01b031681146117705760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a6b565b61142081612974565b5f620c350061178783612542565b6116eb9190613977565b806001600160a01b0381166117b95760405163538ba4f960e01b815260040160405180910390fd5b6040516317066a5760e21b81523060048201526001600160a01b03831690635c19a95c906024015f604051808303815f87803b1580156117f7575f5ffd5b505af1158015611809573d5f5f3e3d5ffd5b505050505050565b61181961298d565b61144b336001612845565b5f61182d6125d6565b905090565b5f5f611849836562726964676560d01b6001611423565b6001600160a01b038116151594909350915050565b61186e60e0820160c0830161340a565b46816001600160401b03161461189757604051631c6c777560e31b815260040160405180910390fd5b6118a760a083016080840161340a565b6001600160401b03811615806118c5575046816001600160401b0316145b156118e357604051631c6c777560e31b815260040160405180910390fd5b6118f760c954610100900460ff1660021490565b156119155760405163bae6e2a960e01b815260040160405180910390fd5b600261192360c95460ff1690565b60ff16036119445760405163dfc60d8560e01b815260040160405180910390fd5b61194e6002611fcc565b61195f610100840160e08501613265565b6001600160a01b0316336001600160a01b031614611990576040516372b6e1c360e11b815260040160405180910390fd5b5f61199d6105fe856135a3565b90506119aa816001611fe2565b6119b581600361232d565b6119d06d7369676e616c5f7365727669636560901b5f611d51565b60405163019b28af60e61b81526003831860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af1158015611a18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a3c91906135c7565b5050611a486001611fcc565b505050565b611a5d60a084016080850161340a565b46816001600160401b031614611a8657604051631c6c777560e31b815260040160405180910390fd5b611a9660e0850160c0860161340a565b6001600160401b0381161580611ab4575046816001600160401b0316145b15611ad257604051631c6c777560e31b815260040160405180910390fd5b611ae660c954610100900460ff1660021490565b15611b045760405163bae6e2a960e01b815260040160405180910390fd5b6002611b1260c95460ff1690565b60ff1603611b335760405163dfc60d8560e01b815260040160405180910390fd5b611b3d6002611fcc565b5f611b4a6105fe876135a3565b9050611b56815f611fe2565b5f611b726d7369676e616c5f7365727669636560901b5f611d51565b604051631933b5e360e11b8152306004820152602481018490529091506001600160a01b038216906332676bc690604401602060405180830381865afa158015611bbe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be2919061395c565b611bff5760405163ab035ad560e01b815260040160405180910390fd5b611c1e8160038418611c1760e08b0160c08c0161340a565b8989612497565b50611c2a82600461232d565b611c38876101200135612034565b611c55576040516335856fbd60e21b815260040160405180910390fd5b611c7e62bc399d60e11b611c6f60808a0160608b01613265565b6001600160a01b0316906129fe565b15611d2257611c9d8230611c9860a08b0160808c0161340a565b612a8b565b611cad6080880160608901613265565b6001600160a01b0316630178733a88610120013589856040518463ffffffff1660e01b8152600401611ce0929190613993565b5f604051808303818588803b158015611cf7575f5ffd5b505af1158015611d09573d5f5f3e3d5ffd5b5050505050611d1d5f195f1b5f1980612a8b565b611d3e565b611d3e6101208801356188b86112d960c08b0160a08c01613265565b5050611d4a6001611fcc565b5050505050565b5f611432468484612763565b5f46611d6f60e0860160c0870161340a565b6001600160401b031614611d8457505f611432565b61142f611da26d7369676e616c5f7365727669636560901b5f611d51565b611dae6105fe876135a3565b61161c60a088016080890161340a565b5f81604051602001611dd091906139b4565b604051602081830303815290604052805190602001209050919050565b604080516060810182525f8082526020820181905291810191909152611e64604080516060810182525f8082526020820181905291810191909152506040805160608101825260fd54815260fe546001600160a01b0381166020830152600160a01b90046001600160401b03169181019190915290565b80519091501580611e76575080515f19145b156115b557604051635ceed17360e01b815260040160405180910390fd5b5f54610100900460ff1615808015611eb257505f54600160ff909116105b80611ecb5750303b158015611ecb57505f5460ff166001145b611ee75760405162461bcd60e51b8152600401610a6b906135de565b5f805460ff191660011790558015611f08575f805461ff0019166101001790555b611f128383612ae0565b8015611a48575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b611f636123ea565b606580546001600160a01b0383166001600160a01b03199091168117909155611f946033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b806004811115611ff457611ff46131ee565b5f83815260fc602052604090205460ff166004811115612016576120166131ee565b14611502576040516319d893ad60e21b815260040160405180910390fd5b5f5f6120516c38bab7ba30afb6b0b730b3b2b960991b6001611d51565b90506001600160a01b03811661206a5750600192915050565b6040516315c638fb60e31b81525f6004820152602481018490526001600160a01b0382169063ae31c7d8906044015f604051808303815f87803b1580156120af575f5ffd5b505af19250505080156120c0575060015b6120cc57505f92915050565b50600192915050565b5f806120e961012085016101008601613265565b6001600160a01b0316036120ff575060016116eb565b3061211261012085016101008601613265565b6001600160a01b031603612128575060016116eb565b6001600160a01b03821661214461012085016101008601613265565b6001600160a01b03160361215a575060016116eb565b600461216a61014085018561368f565b9050101580156121a15750637f07c94760e01b61218b61014085018561368f565b612194916139ea565b6001600160e01b03191614155b801561143257506114326121bd61012085016101008601613265565b6001600160a01b03163b151590565b5f6001600160a01b0385166121f457604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b5f3061221b6080870160608801613265565b6001600160a01b03160361223157612231613a22565b610120850135158015612251575061224d61014086018661368f565b1590505b1561225e57506001612325565b825f0361226c57505f612325565b612290846122806080880160608901613265565b611c9860a0890160808a0161340a565b5f6122a361012087016101008801613265565b90506101208601355f6122ba61014089018961368f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525084519495509384935083925090506020850186888cf194505a90508515612314576123148188612b1a565b6123205f198080612a8b565b505050505b949350505050565b80600481111561233f5761233f6131ee565b5f83815260fc602052604090205460ff166004811115612361576123616131ee565b0361237f576040516319d893ad60e21b815260040160405180910390fd5b5f82815260fc60205260409020805482919060ff191660018360048111156123a9576123a96131ee565b0217905550817f6c51882bc2ed67617f77a1e9b9a25d2caad8448647ecb093b357a603b2575634826040516123de9190613297565b60405180910390a25050565b6033546001600160a01b0316331461144b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a6b565b5f8061245e61245761014085018561368f565b9050611779565b63ffffffff1690508061248f61247a60608601604087016135ae565b63ffffffff168361256a90919063ffffffff16565b039392505050565b5f856001600160a01b031663910af6ed856124bc876562726964676560d01b5f611423565b8887876040518663ffffffff1660e01b81526004016124df959493929190613a36565b6020604051808303815f875af1925050508015612519575060408051601f3d908101601f19168201909252612516918101906135c7565b60015b612536576040516314504c7360e31b815260040160405180910390fd5b90505b95945050505050565b5f815f0361255157505f919050565b60046020601f8401046020026101a001901b9050919050565b5f8183116125785781611432565b5090919050565b5f81831161258d5782611432565b50919050565b815f0361259f57505050565b6125b983838360405180602001604052805f8152506121cc565b611a4857604051634c67134d60e11b815260040160405180910390fd5b5f516020613b2a5f395f51905f52546001600160a01b031690565b6114206123ea565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561262c57611a4883612b2e565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612686575060408051601f3d908101601f19168201909252612683918101906135c7565b60015b6126e95760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a6b565b5f516020613b2a5f395f51905f5281146127575760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a6b565b50611a48838383612bc9565b5f61276e8484612bed565b90508115801561278557506001600160a01b038116155b1561143257604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610a6b565b6127c960c954610100900460ff1660021490565b6127e65760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6033546001600160a01b038381169116148061288d57506128786d636861696e5f7761746368646f6760901b6001611d51565b6001600160a01b0316826001600160a01b0316145b15612896575050565b8080156128d057506128bb6e6272696467655f7761746368646f6760881b6001611d51565b6001600160a01b0316826001600160a01b0316145b156128d9575050565b604051630d85cccf60e11b815260040160405180910390fd5b5f856001600160a01b031663ce9d082085612917876562726964676560d01b5f611423565b8887876040518663ffffffff1660e01b815260040161293a959493929190613a36565b5f6040518083038186803b158015612950575f5ffd5b505afa925050508015612961575060015b61296c57505f612539565b506001612539565b606580546001600160a01b031916905561142081612c8f565b6129a160c954610100900460ff1660021490565b156129bf5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589060200161283b565b5f6001600160a01b0383163b612a1557505f6116eb565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015612a7f575060408051601f3d908101601f19168201909252612a7c9181019061395c565b60015b156116eb579392505050565b604080516060810182528481526001600160a01b03909316602084018190526001600160401b03909216920182905260fd9290925560fe8054600160a01b9092026001600160e01b0319909216909217179055565b806001600160a01b038116612b085760405163538ba4f960e01b815260040160405180910390fd5b612b1183612ce0565b611a4882612d3e565b612b25603f82613a77565b82101561150257fe5b6001600160a01b0381163b612b9b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a6b565b5f516020613b2a5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b612bd283612dae565b5f82511180612bde5750805b15611a4857610a218383612ded565b6097545f906001600160a01b031680612c1957604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015612c6b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123259190613a96565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16612d065760405162461bcd60e51b8152600401610a6b90613ab1565b612d0e612e12565b612d2c6001600160a01b03821615612d265781612974565b33612974565b5060c9805461ff001916610100179055565b5f54610100900460ff16612d645760405162461bcd60e51b8152600401610a6b90613ab1565b6001600160401b03461115612d8c5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b612db781612b2e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606114328383604051806060016040528060278152602001613b4a60279139612e38565b5f54610100900460ff1661144b5760405162461bcd60e51b8152600401610a6b90613ab1565b60605f5f856001600160a01b031685604051612e549190613afc565b5f60405180830381855af49150503d805f8114612e8c576040519150601f19603f3d011682016040523d82523d5f602084013e612e91565b606091505b5091509150612ea286838387612eac565b9695505050505050565b60608315612f1a5782515f03612f13576001600160a01b0385163b612f135760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a6b565b5081612325565b6123258383815115612f2f5781518083602001fd5b8060405162461bcd60e51b8152600401610a6b9190613b17565b5f610160828403121561258d575f5ffd5b8015158114611420575f5ffd5b5f5f60408385031215612f78575f5ffd5b82356001600160401b03811115612f8d575f5ffd5b612f9985828601612f49565b9250506020830135612faa81612f5a565b809150509250929050565b5f60208284031215612fc5575f5ffd5b81356001600160401b03811115612fda575f5ffd5b61232584828501612f49565b5f5b83811015613000578181015183820152602001612fe8565b50505f910152565b5f815180845261301f816020860160208601612fe6565b601f01601f19169290920160200192915050565b80516001600160401b031682525f602082015161305b60208501826001600160401b03169052565b506040820151613073604085018263ffffffff169052565b50606082015161308e60608501826001600160a01b03169052565b5060808201516130a960808501826001600160401b03169052565b5060a08201516130c460a08501826001600160a01b03169052565b5060c08201516130df60c08501826001600160401b03169052565b5060e08201516130fa60e08501826001600160a01b03169052565b506101008201516131176101008501826001600160a01b03169052565b50610120820151610120840152610140820151610160610140850152612325610160850182613008565b828152604060208201525f61142f6040830184613033565b5f5f5f6040848603121561316b575f5ffd5b83356001600160401b03811115613180575f5ffd5b61318c86828701612f49565b93505060208401356001600160401b038111156131a7575f5ffd5b8401601f810186136131b7575f5ffd5b80356001600160401b038111156131cc575f5ffd5b8660208284010111156131dd575f5ffd5b939660209190910195509293505050565b634e487b7160e01b5f52602160045260245ffd5b60058110613212576132126131ee565b9052565b604081016132248285613202565b60048310613234576132346131ee565b8260208301529392505050565b6001600160a01b0381168114611420575f5ffd5b803561326081613241565b919050565b5f60208284031215613275575f5ffd5b813561143281613241565b5f60208284031215613290575f5ffd5b5035919050565b602081016116eb8284613202565b80356001600160401b0381168114613260575f5ffd5b5f5f5f606084860312156132cd575f5ffd5b6132d6846132a5565b92506020840135915060408401356132ed81612f5a565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b038111828210171561332f5761332f6132f8565b60405290565b5f82601f830112613344575f5ffd5b81356001600160401b0381111561335d5761335d6132f8565b604051601f8201601f19908116603f011681016001600160401b038111828210171561338b5761338b6132f8565b6040528181528382016020018510156133a2575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156133cf575f5ffd5b82356133da81613241565b915060208301356001600160401b038111156133f4575f5ffd5b61340085828601613335565b9150509250929050565b5f6020828403121561341a575f5ffd5b611432826132a5565b5f5f60408385031215613434575f5ffd5b823591506020830135612faa81612f5a565b803563ffffffff81168114613260575f5ffd5b5f610160828403121561346a575f5ffd5b61347261330c565b905061347d826132a5565b815261348b602083016132a5565b602082015261349c60408301613446565b60408201526134ad60608301613255565b60608201526134be608083016132a5565b60808201526134cf60a08301613255565b60a08201526134e060c083016132a5565b60c08201526134f160e08301613255565b60e08201526135036101008301613255565b61010082015261012082810135908201526101408201356001600160401b0381111561352d575f5ffd5b61353984828501613335565b6101408301525092915050565b5f60208284031215613556575f5ffd5b81356001600160401b0381111561356b575f5ffd5b61232584828501613459565b5f5f60408385031215613588575f5ffd5b823561359381613241565b91506020830135612faa81613241565b5f6116eb3683613459565b5f602082840312156135be575f5ffd5b61143282613446565b5f602082840312156135d7575f5ffd5b5051919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156116eb576116eb61362c565b5f6001600160401b0382166001600160401b0381036136745761367461362c565b60010192915050565b602081525f6114326020830184613033565b5f5f8335601e198436030181126136a4575f5ffd5b8301803591506001600160401b038211156136bd575f5ffd5b6020019150368190038213156136d1575f5ffd5b9250929050565b634e487b7160e01b5f52601260045260245ffd5b5f5f8335601e19843603018112613701575f5ffd5b83016020810192503590506001600160401b0381111561371f575f5ffd5b8036038213156136d1575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b61376f82613762836132a5565b6001600160401b03169052565b5f61377c602083016132a5565b6001600160401b0316602084015261379660408301613446565b63ffffffff1660408401526137ad60608301613255565b6001600160a01b031660608401526137c7608083016132a5565b6001600160401b031660808401526137e160a08301613255565b6001600160a01b031660a08401526137fb60c083016132a5565b6001600160401b031660c084015261381560e08301613255565b6001600160a01b031660e08401526138306101008301613255565b6001600160a01b031661010084015261012082810135908401526138586101408301836136ec565b6101606101408601526125396101608601828461372d565b60a081525f61388260a0830185613755565b905063ffffffff835116602083015263ffffffff602084015116604083015263ffffffff60408401511660608301526060830151151560808301529392505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f6020828403121561396c575f5ffd5b815161143281612f5a565b63ffffffff81811683821601908111156116eb576116eb61362c565b604081525f6139a56040830185613755565b90508260208301529392505050565b60408152600d60408201526c5441494b4f5f4d45535341474560981b6060820152608060208201525f6114326080830184613033565b80356001600160e01b03198116906004841015613a1b576001600160e01b0319600485900360031b81901b82161691505b5092915050565b634e487b7160e01b5f52600160045260245ffd5b6001600160401b038616815260018060a01b0385166020820152836040820152608060608201525f613a6c60808301848661372d565b979650505050505050565b5f82613a9157634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613aa6575f5ffd5b815161143281613241565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f8251613b0d818460208701612fe6565b9190910192915050565b602081525f611432602083018461300856fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206ccb67f04aaf63488576bbb651d54656794e2eac08c3401a79a0cda25cd7f6e664736f6c634300081b0033", "balance": "0x0" }, "0x1670000000000000000000000000000000000001": { diff --git a/packages/protocol/test/genesis/data/genesis_storage_layout.json b/packages/protocol/test/genesis/data/genesis_storage_layout.json index f8577b300b..a7fb004322 100644 --- a/packages/protocol/test/genesis/data/genesis_storage_layout.json +++ b/packages/protocol/test/genesis/data/genesis_storage_layout.json @@ -2,7 +2,7 @@ "SharedAddressManagerImpl": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "_initialized", "offset": 0, @@ -10,7 +10,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "_initializing", "offset": 1, @@ -18,7 +18,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -26,7 +26,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "_owner", "offset": 0, @@ -34,7 +34,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -42,7 +42,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "_pendingOwner", "offset": 0, @@ -50,7 +50,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -58,7 +58,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "addressManager", "offset": 0, @@ -66,7 +66,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -74,7 +74,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__reentry", "offset": 0, @@ -82,7 +82,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__paused", "offset": 1, @@ -90,7 +90,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "lastUnpausedAt", "offset": 2, @@ -98,7 +98,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -106,7 +106,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3522, + "astId": 3541, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__addresses", "offset": 0, @@ -114,7 +114,7 @@ "type": "t_mapping(t_uint256,t_mapping(t_bytes32,t_address))" }, { - "astId": 3526, + "astId": 3545, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -184,7 +184,7 @@ "SharedAddressManager": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "_initialized", "offset": 0, @@ -192,7 +192,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "_initializing", "offset": 1, @@ -200,7 +200,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -208,7 +208,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "_owner", "offset": 0, @@ -216,7 +216,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -224,7 +224,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "_pendingOwner", "offset": 0, @@ -232,7 +232,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -240,7 +240,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "addressManager", "offset": 0, @@ -248,7 +248,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -256,7 +256,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__reentry", "offset": 0, @@ -264,7 +264,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__paused", "offset": 1, @@ -272,7 +272,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "lastUnpausedAt", "offset": 2, @@ -280,7 +280,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -288,7 +288,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3522, + "astId": 3541, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__addresses", "offset": 0, @@ -296,7 +296,7 @@ "type": "t_mapping(t_uint256,t_mapping(t_bytes32,t_address))" }, { - "astId": 3526, + "astId": 3545, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -366,7 +366,7 @@ "BridgeImpl": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "_initialized", "offset": 0, @@ -374,7 +374,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "_initializing", "offset": 1, @@ -382,7 +382,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "__gap", "offset": 0, @@ -390,7 +390,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "_owner", "offset": 0, @@ -398,7 +398,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "__gap", "offset": 0, @@ -406,7 +406,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "_pendingOwner", "offset": 0, @@ -414,7 +414,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "__gap", "offset": 0, @@ -422,7 +422,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "addressManager", "offset": 0, @@ -430,7 +430,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "__gap", "offset": 0, @@ -438,7 +438,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "__reentry", "offset": 0, @@ -446,7 +446,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "__paused", "offset": 1, @@ -454,7 +454,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "lastUnpausedAt", "offset": 2, @@ -462,7 +462,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "__gap", "offset": 0, @@ -491,7 +491,7 @@ "label": "messageStatus", "offset": 0, "slot": "252", - "type": "t_mapping(t_bytes32,t_enum(Status)3347)" + "type": "t_mapping(t_bytes32,t_enum(Status)3366)" }, { "astId": 1743, @@ -499,7 +499,7 @@ "label": "__ctx", "offset": 0, "slot": "253", - "type": "t_struct(Context)3382_storage" + "type": "t_struct(Context)3401_storage" }, { "astId": 1746, @@ -560,25 +560,25 @@ "label": "bytes32", "numberOfBytes": "32" }, - "t_enum(Status)3347": { + "t_enum(Status)3366": { "encoding": "inplace", "label": "enum IBridge.Status", "numberOfBytes": "1" }, - "t_mapping(t_bytes32,t_enum(Status)3347)": { + "t_mapping(t_bytes32,t_enum(Status)3366)": { "encoding": "mapping", "key": "t_bytes32", "label": "mapping(bytes32 => enum IBridge.Status)", "numberOfBytes": "32", - "value": "t_enum(Status)3347" + "value": "t_enum(Status)3366" }, - "t_struct(Context)3382_storage": { + "t_struct(Context)3401_storage": { "encoding": "inplace", "label": "struct IBridge.Context", "numberOfBytes": "64", "members": [ { - "astId": 3377, + "astId": 3396, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "msgHash", "offset": 0, @@ -586,7 +586,7 @@ "type": "t_bytes32" }, { - "astId": 3379, + "astId": 3398, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "from", "offset": 0, @@ -594,7 +594,7 @@ "type": "t_address" }, { - "astId": 3381, + "astId": 3400, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "srcChainId", "offset": 20, @@ -623,7 +623,7 @@ "Bridge": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "_initialized", "offset": 0, @@ -631,7 +631,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "_initializing", "offset": 1, @@ -639,7 +639,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "__gap", "offset": 0, @@ -647,7 +647,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "_owner", "offset": 0, @@ -655,7 +655,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "__gap", "offset": 0, @@ -663,7 +663,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "_pendingOwner", "offset": 0, @@ -671,7 +671,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "__gap", "offset": 0, @@ -679,7 +679,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "addressManager", "offset": 0, @@ -687,7 +687,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "__gap", "offset": 0, @@ -695,7 +695,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "__reentry", "offset": 0, @@ -703,7 +703,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "__paused", "offset": 1, @@ -711,7 +711,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "lastUnpausedAt", "offset": 2, @@ -719,7 +719,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "__gap", "offset": 0, @@ -748,7 +748,7 @@ "label": "messageStatus", "offset": 0, "slot": "252", - "type": "t_mapping(t_bytes32,t_enum(Status)3347)" + "type": "t_mapping(t_bytes32,t_enum(Status)3366)" }, { "astId": 1743, @@ -756,7 +756,7 @@ "label": "__ctx", "offset": 0, "slot": "253", - "type": "t_struct(Context)3382_storage" + "type": "t_struct(Context)3401_storage" }, { "astId": 1746, @@ -817,25 +817,25 @@ "label": "bytes32", "numberOfBytes": "32" }, - "t_enum(Status)3347": { + "t_enum(Status)3366": { "encoding": "inplace", "label": "enum IBridge.Status", "numberOfBytes": "1" }, - "t_mapping(t_bytes32,t_enum(Status)3347)": { + "t_mapping(t_bytes32,t_enum(Status)3366)": { "encoding": "mapping", "key": "t_bytes32", "label": "mapping(bytes32 => enum IBridge.Status)", "numberOfBytes": "32", - "value": "t_enum(Status)3347" + "value": "t_enum(Status)3366" }, - "t_struct(Context)3382_storage": { + "t_struct(Context)3401_storage": { "encoding": "inplace", "label": "struct IBridge.Context", "numberOfBytes": "64", "members": [ { - "astId": 3377, + "astId": 3396, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "msgHash", "offset": 0, @@ -843,7 +843,7 @@ "type": "t_bytes32" }, { - "astId": 3379, + "astId": 3398, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "from", "offset": 0, @@ -851,7 +851,7 @@ "type": "t_address" }, { - "astId": 3381, + "astId": 3400, "contract": "contracts/shared/bridge/Bridge.sol:Bridge", "label": "srcChainId", "offset": 20, @@ -880,7 +880,7 @@ "ERC20VaultImpl": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "_initialized", "offset": 0, @@ -888,7 +888,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "_initializing", "offset": 1, @@ -896,7 +896,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__gap", "offset": 0, @@ -904,7 +904,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "_owner", "offset": 0, @@ -912,7 +912,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__gap", "offset": 0, @@ -920,7 +920,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "_pendingOwner", "offset": 0, @@ -928,7 +928,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__gap", "offset": 0, @@ -936,7 +936,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "addressManager", "offset": 0, @@ -944,7 +944,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__gap", "offset": 0, @@ -952,7 +952,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__reentry", "offset": 0, @@ -960,7 +960,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__paused", "offset": 1, @@ -968,7 +968,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "lastUnpausedAt", "offset": 2, @@ -976,7 +976,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__gap", "offset": 0, @@ -984,7 +984,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 6436, + "astId": 6455, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__gap", "offset": 0, @@ -992,15 +992,15 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 8534, + "astId": 8553, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "bridgedToCanonical", "offset": 0, "slot": "301", - "type": "t_mapping(t_address,t_struct(CanonicalERC20)8512_storage)" + "type": "t_mapping(t_address,t_struct(CanonicalERC20)8531_storage)" }, { - "astId": 8541, + "astId": 8560, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "canonicalToBridged", "offset": 0, @@ -1008,7 +1008,7 @@ "type": "t_mapping(t_uint256,t_mapping(t_address,t_address))" }, { - "astId": 8546, + "astId": 8565, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "btokenDenylist", "offset": 0, @@ -1016,7 +1016,7 @@ "type": "t_mapping(t_address,t_bool)" }, { - "astId": 8553, + "astId": 8572, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "lastMigrationStart", "offset": 0, @@ -1024,7 +1024,7 @@ "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))" }, { - "astId": 8557, + "astId": 8576, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__gap", "offset": 0, @@ -1075,12 +1075,12 @@ "numberOfBytes": "32", "value": "t_bool" }, - "t_mapping(t_address,t_struct(CanonicalERC20)8512_storage)": { + "t_mapping(t_address,t_struct(CanonicalERC20)8531_storage)": { "encoding": "mapping", "key": "t_address", "label": "mapping(address => struct ERC20Vault.CanonicalERC20)", "numberOfBytes": "32", - "value": "t_struct(CanonicalERC20)8512_storage" + "value": "t_struct(CanonicalERC20)8531_storage" }, "t_mapping(t_address,t_uint256)": { "encoding": "mapping", @@ -1108,13 +1108,13 @@ "label": "string", "numberOfBytes": "32" }, - "t_struct(CanonicalERC20)8512_storage": { + "t_struct(CanonicalERC20)8531_storage": { "encoding": "inplace", "label": "struct ERC20Vault.CanonicalERC20", "numberOfBytes": "96", "members": [ { - "astId": 8503, + "astId": 8522, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "chainId", "offset": 0, @@ -1122,7 +1122,7 @@ "type": "t_uint64" }, { - "astId": 8505, + "astId": 8524, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "addr", "offset": 8, @@ -1130,7 +1130,7 @@ "type": "t_address" }, { - "astId": 8507, + "astId": 8526, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "decimals", "offset": 28, @@ -1138,7 +1138,7 @@ "type": "t_uint8" }, { - "astId": 8509, + "astId": 8528, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "symbol", "offset": 0, @@ -1146,7 +1146,7 @@ "type": "t_string_storage" }, { - "astId": 8511, + "astId": 8530, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "name", "offset": 0, @@ -1175,7 +1175,7 @@ "ERC20Vault": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "_initialized", "offset": 0, @@ -1183,7 +1183,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "_initializing", "offset": 1, @@ -1191,7 +1191,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__gap", "offset": 0, @@ -1199,7 +1199,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "_owner", "offset": 0, @@ -1207,7 +1207,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__gap", "offset": 0, @@ -1215,7 +1215,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "_pendingOwner", "offset": 0, @@ -1223,7 +1223,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__gap", "offset": 0, @@ -1231,7 +1231,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "addressManager", "offset": 0, @@ -1239,7 +1239,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__gap", "offset": 0, @@ -1247,7 +1247,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__reentry", "offset": 0, @@ -1255,7 +1255,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__paused", "offset": 1, @@ -1263,7 +1263,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "lastUnpausedAt", "offset": 2, @@ -1271,7 +1271,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__gap", "offset": 0, @@ -1279,7 +1279,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 6436, + "astId": 6455, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__gap", "offset": 0, @@ -1287,15 +1287,15 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 8534, + "astId": 8553, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "bridgedToCanonical", "offset": 0, "slot": "301", - "type": "t_mapping(t_address,t_struct(CanonicalERC20)8512_storage)" + "type": "t_mapping(t_address,t_struct(CanonicalERC20)8531_storage)" }, { - "astId": 8541, + "astId": 8560, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "canonicalToBridged", "offset": 0, @@ -1303,7 +1303,7 @@ "type": "t_mapping(t_uint256,t_mapping(t_address,t_address))" }, { - "astId": 8546, + "astId": 8565, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "btokenDenylist", "offset": 0, @@ -1311,7 +1311,7 @@ "type": "t_mapping(t_address,t_bool)" }, { - "astId": 8553, + "astId": 8572, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "lastMigrationStart", "offset": 0, @@ -1319,7 +1319,7 @@ "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))" }, { - "astId": 8557, + "astId": 8576, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "__gap", "offset": 0, @@ -1370,12 +1370,12 @@ "numberOfBytes": "32", "value": "t_bool" }, - "t_mapping(t_address,t_struct(CanonicalERC20)8512_storage)": { + "t_mapping(t_address,t_struct(CanonicalERC20)8531_storage)": { "encoding": "mapping", "key": "t_address", "label": "mapping(address => struct ERC20Vault.CanonicalERC20)", "numberOfBytes": "32", - "value": "t_struct(CanonicalERC20)8512_storage" + "value": "t_struct(CanonicalERC20)8531_storage" }, "t_mapping(t_address,t_uint256)": { "encoding": "mapping", @@ -1403,13 +1403,13 @@ "label": "string", "numberOfBytes": "32" }, - "t_struct(CanonicalERC20)8512_storage": { + "t_struct(CanonicalERC20)8531_storage": { "encoding": "inplace", "label": "struct ERC20Vault.CanonicalERC20", "numberOfBytes": "96", "members": [ { - "astId": 8503, + "astId": 8522, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "chainId", "offset": 0, @@ -1417,7 +1417,7 @@ "type": "t_uint64" }, { - "astId": 8505, + "astId": 8524, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "addr", "offset": 8, @@ -1425,7 +1425,7 @@ "type": "t_address" }, { - "astId": 8507, + "astId": 8526, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "decimals", "offset": 28, @@ -1433,7 +1433,7 @@ "type": "t_uint8" }, { - "astId": 8509, + "astId": 8528, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "symbol", "offset": 0, @@ -1441,7 +1441,7 @@ "type": "t_string_storage" }, { - "astId": 8511, + "astId": 8530, "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", "label": "name", "offset": 0, @@ -1470,7 +1470,7 @@ "ERC721VaultImpl": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "_initialized", "offset": 0, @@ -1478,7 +1478,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "_initializing", "offset": 1, @@ -1486,7 +1486,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__gap", "offset": 0, @@ -1494,7 +1494,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "_owner", "offset": 0, @@ -1502,7 +1502,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__gap", "offset": 0, @@ -1510,7 +1510,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "_pendingOwner", "offset": 0, @@ -1518,7 +1518,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__gap", "offset": 0, @@ -1526,7 +1526,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "addressManager", "offset": 0, @@ -1534,7 +1534,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__gap", "offset": 0, @@ -1542,7 +1542,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__reentry", "offset": 0, @@ -1550,7 +1550,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__paused", "offset": 1, @@ -1558,7 +1558,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "lastUnpausedAt", "offset": 2, @@ -1566,7 +1566,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__gap", "offset": 0, @@ -1574,7 +1574,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 6436, + "astId": 6455, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__gap", "offset": 0, @@ -1582,15 +1582,15 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 6278, + "astId": 6297, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "bridgedToCanonical", "offset": 0, "slot": "301", - "type": "t_mapping(t_address,t_struct(CanonicalNFT)6252_storage)" + "type": "t_mapping(t_address,t_struct(CanonicalNFT)6271_storage)" }, { - "astId": 6285, + "astId": 6304, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "canonicalToBridged", "offset": 0, @@ -1598,7 +1598,7 @@ "type": "t_mapping(t_uint256,t_mapping(t_address,t_address))" }, { - "astId": 6289, + "astId": 6308, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__gap", "offset": 0, @@ -1606,7 +1606,7 @@ "type": "t_array(t_uint256)48_storage" }, { - "astId": 9603, + "astId": 9622, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__gap", "offset": 0, @@ -1650,12 +1650,12 @@ "numberOfBytes": "32", "value": "t_address" }, - "t_mapping(t_address,t_struct(CanonicalNFT)6252_storage)": { + "t_mapping(t_address,t_struct(CanonicalNFT)6271_storage)": { "encoding": "mapping", "key": "t_address", "label": "mapping(address => struct BaseNFTVault.CanonicalNFT)", "numberOfBytes": "32", - "value": "t_struct(CanonicalNFT)6252_storage" + "value": "t_struct(CanonicalNFT)6271_storage" }, "t_mapping(t_uint256,t_mapping(t_address,t_address))": { "encoding": "mapping", @@ -1669,13 +1669,13 @@ "label": "string", "numberOfBytes": "32" }, - "t_struct(CanonicalNFT)6252_storage": { + "t_struct(CanonicalNFT)6271_storage": { "encoding": "inplace", "label": "struct BaseNFTVault.CanonicalNFT", "numberOfBytes": "96", "members": [ { - "astId": 6245, + "astId": 6264, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "chainId", "offset": 0, @@ -1683,7 +1683,7 @@ "type": "t_uint64" }, { - "astId": 6247, + "astId": 6266, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "addr", "offset": 8, @@ -1691,7 +1691,7 @@ "type": "t_address" }, { - "astId": 6249, + "astId": 6268, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "symbol", "offset": 0, @@ -1699,7 +1699,7 @@ "type": "t_string_storage" }, { - "astId": 6251, + "astId": 6270, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "name", "offset": 0, @@ -1728,7 +1728,7 @@ "ERC721Vault": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "_initialized", "offset": 0, @@ -1736,7 +1736,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "_initializing", "offset": 1, @@ -1744,7 +1744,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__gap", "offset": 0, @@ -1752,7 +1752,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "_owner", "offset": 0, @@ -1760,7 +1760,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__gap", "offset": 0, @@ -1768,7 +1768,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "_pendingOwner", "offset": 0, @@ -1776,7 +1776,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__gap", "offset": 0, @@ -1784,7 +1784,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "addressManager", "offset": 0, @@ -1792,7 +1792,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__gap", "offset": 0, @@ -1800,7 +1800,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__reentry", "offset": 0, @@ -1808,7 +1808,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__paused", "offset": 1, @@ -1816,7 +1816,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "lastUnpausedAt", "offset": 2, @@ -1824,7 +1824,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__gap", "offset": 0, @@ -1832,7 +1832,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 6436, + "astId": 6455, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__gap", "offset": 0, @@ -1840,15 +1840,15 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 6278, + "astId": 6297, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "bridgedToCanonical", "offset": 0, "slot": "301", - "type": "t_mapping(t_address,t_struct(CanonicalNFT)6252_storage)" + "type": "t_mapping(t_address,t_struct(CanonicalNFT)6271_storage)" }, { - "astId": 6285, + "astId": 6304, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "canonicalToBridged", "offset": 0, @@ -1856,7 +1856,7 @@ "type": "t_mapping(t_uint256,t_mapping(t_address,t_address))" }, { - "astId": 6289, + "astId": 6308, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__gap", "offset": 0, @@ -1864,7 +1864,7 @@ "type": "t_array(t_uint256)48_storage" }, { - "astId": 9603, + "astId": 9622, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "__gap", "offset": 0, @@ -1908,12 +1908,12 @@ "numberOfBytes": "32", "value": "t_address" }, - "t_mapping(t_address,t_struct(CanonicalNFT)6252_storage)": { + "t_mapping(t_address,t_struct(CanonicalNFT)6271_storage)": { "encoding": "mapping", "key": "t_address", "label": "mapping(address => struct BaseNFTVault.CanonicalNFT)", "numberOfBytes": "32", - "value": "t_struct(CanonicalNFT)6252_storage" + "value": "t_struct(CanonicalNFT)6271_storage" }, "t_mapping(t_uint256,t_mapping(t_address,t_address))": { "encoding": "mapping", @@ -1927,13 +1927,13 @@ "label": "string", "numberOfBytes": "32" }, - "t_struct(CanonicalNFT)6252_storage": { + "t_struct(CanonicalNFT)6271_storage": { "encoding": "inplace", "label": "struct BaseNFTVault.CanonicalNFT", "numberOfBytes": "96", "members": [ { - "astId": 6245, + "astId": 6264, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "chainId", "offset": 0, @@ -1941,7 +1941,7 @@ "type": "t_uint64" }, { - "astId": 6247, + "astId": 6266, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "addr", "offset": 8, @@ -1949,7 +1949,7 @@ "type": "t_address" }, { - "astId": 6249, + "astId": 6268, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "symbol", "offset": 0, @@ -1957,7 +1957,7 @@ "type": "t_string_storage" }, { - "astId": 6251, + "astId": 6270, "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", "label": "name", "offset": 0, @@ -1986,7 +1986,7 @@ "ERC1155VaultImpl": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "_initialized", "offset": 0, @@ -1994,7 +1994,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "_initializing", "offset": 1, @@ -2002,7 +2002,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2010,7 +2010,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "_owner", "offset": 0, @@ -2018,7 +2018,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2026,7 +2026,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "_pendingOwner", "offset": 0, @@ -2034,7 +2034,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2042,7 +2042,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "addressManager", "offset": 0, @@ -2050,7 +2050,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2058,7 +2058,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__reentry", "offset": 0, @@ -2066,7 +2066,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__paused", "offset": 1, @@ -2074,7 +2074,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "lastUnpausedAt", "offset": 2, @@ -2082,7 +2082,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2090,7 +2090,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 6436, + "astId": 6455, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2098,15 +2098,15 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 6278, + "astId": 6297, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "bridgedToCanonical", "offset": 0, "slot": "301", - "type": "t_mapping(t_address,t_struct(CanonicalNFT)6252_storage)" + "type": "t_mapping(t_address,t_struct(CanonicalNFT)6271_storage)" }, { - "astId": 6285, + "astId": 6304, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "canonicalToBridged", "offset": 0, @@ -2114,7 +2114,7 @@ "type": "t_mapping(t_uint256,t_mapping(t_address,t_address))" }, { - "astId": 6289, + "astId": 6308, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2122,7 +2122,7 @@ "type": "t_array(t_uint256)48_storage" }, { - "astId": 16755, + "astId": 16774, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2130,7 +2130,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 12562, + "astId": 12581, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2138,7 +2138,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 7738, + "astId": 7757, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2182,12 +2182,12 @@ "numberOfBytes": "32", "value": "t_address" }, - "t_mapping(t_address,t_struct(CanonicalNFT)6252_storage)": { + "t_mapping(t_address,t_struct(CanonicalNFT)6271_storage)": { "encoding": "mapping", "key": "t_address", "label": "mapping(address => struct BaseNFTVault.CanonicalNFT)", "numberOfBytes": "32", - "value": "t_struct(CanonicalNFT)6252_storage" + "value": "t_struct(CanonicalNFT)6271_storage" }, "t_mapping(t_uint256,t_mapping(t_address,t_address))": { "encoding": "mapping", @@ -2201,13 +2201,13 @@ "label": "string", "numberOfBytes": "32" }, - "t_struct(CanonicalNFT)6252_storage": { + "t_struct(CanonicalNFT)6271_storage": { "encoding": "inplace", "label": "struct BaseNFTVault.CanonicalNFT", "numberOfBytes": "96", "members": [ { - "astId": 6245, + "astId": 6264, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "chainId", "offset": 0, @@ -2215,7 +2215,7 @@ "type": "t_uint64" }, { - "astId": 6247, + "astId": 6266, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "addr", "offset": 8, @@ -2223,7 +2223,7 @@ "type": "t_address" }, { - "astId": 6249, + "astId": 6268, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "symbol", "offset": 0, @@ -2231,7 +2231,7 @@ "type": "t_string_storage" }, { - "astId": 6251, + "astId": 6270, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "name", "offset": 0, @@ -2260,7 +2260,7 @@ "ERC1155Vault": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "_initialized", "offset": 0, @@ -2268,7 +2268,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "_initializing", "offset": 1, @@ -2276,7 +2276,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2284,7 +2284,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "_owner", "offset": 0, @@ -2292,7 +2292,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2300,7 +2300,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "_pendingOwner", "offset": 0, @@ -2308,7 +2308,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2316,7 +2316,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "addressManager", "offset": 0, @@ -2324,7 +2324,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2332,7 +2332,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__reentry", "offset": 0, @@ -2340,7 +2340,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__paused", "offset": 1, @@ -2348,7 +2348,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "lastUnpausedAt", "offset": 2, @@ -2356,7 +2356,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2364,7 +2364,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 6436, + "astId": 6455, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2372,15 +2372,15 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 6278, + "astId": 6297, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "bridgedToCanonical", "offset": 0, "slot": "301", - "type": "t_mapping(t_address,t_struct(CanonicalNFT)6252_storage)" + "type": "t_mapping(t_address,t_struct(CanonicalNFT)6271_storage)" }, { - "astId": 6285, + "astId": 6304, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "canonicalToBridged", "offset": 0, @@ -2388,7 +2388,7 @@ "type": "t_mapping(t_uint256,t_mapping(t_address,t_address))" }, { - "astId": 6289, + "astId": 6308, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2396,7 +2396,7 @@ "type": "t_array(t_uint256)48_storage" }, { - "astId": 16755, + "astId": 16774, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2404,7 +2404,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 12562, + "astId": 12581, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2412,7 +2412,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 7738, + "astId": 7757, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "__gap", "offset": 0, @@ -2456,12 +2456,12 @@ "numberOfBytes": "32", "value": "t_address" }, - "t_mapping(t_address,t_struct(CanonicalNFT)6252_storage)": { + "t_mapping(t_address,t_struct(CanonicalNFT)6271_storage)": { "encoding": "mapping", "key": "t_address", "label": "mapping(address => struct BaseNFTVault.CanonicalNFT)", "numberOfBytes": "32", - "value": "t_struct(CanonicalNFT)6252_storage" + "value": "t_struct(CanonicalNFT)6271_storage" }, "t_mapping(t_uint256,t_mapping(t_address,t_address))": { "encoding": "mapping", @@ -2475,13 +2475,13 @@ "label": "string", "numberOfBytes": "32" }, - "t_struct(CanonicalNFT)6252_storage": { + "t_struct(CanonicalNFT)6271_storage": { "encoding": "inplace", "label": "struct BaseNFTVault.CanonicalNFT", "numberOfBytes": "96", "members": [ { - "astId": 6245, + "astId": 6264, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "chainId", "offset": 0, @@ -2489,7 +2489,7 @@ "type": "t_uint64" }, { - "astId": 6247, + "astId": 6266, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "addr", "offset": 8, @@ -2497,7 +2497,7 @@ "type": "t_address" }, { - "astId": 6249, + "astId": 6268, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "symbol", "offset": 0, @@ -2505,7 +2505,7 @@ "type": "t_string_storage" }, { - "astId": 6251, + "astId": 6270, "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", "label": "name", "offset": 0, @@ -2534,7 +2534,7 @@ "BridgedERC20": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "_initialized", "offset": 0, @@ -2542,7 +2542,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "_initializing", "offset": 1, @@ -2550,7 +2550,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "__gap", "offset": 0, @@ -2558,7 +2558,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "_owner", "offset": 0, @@ -2566,7 +2566,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "__gap", "offset": 0, @@ -2574,7 +2574,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "_pendingOwner", "offset": 0, @@ -2582,7 +2582,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "__gap", "offset": 0, @@ -2590,7 +2590,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "addressManager", "offset": 0, @@ -2598,7 +2598,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "__gap", "offset": 0, @@ -2606,7 +2606,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "__reentry", "offset": 0, @@ -2614,7 +2614,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "__paused", "offset": 1, @@ -2622,7 +2622,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "lastUnpausedAt", "offset": 2, @@ -2630,7 +2630,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "__gap", "offset": 0, @@ -2638,7 +2638,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 12583, + "astId": 12602, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "_balances", "offset": 0, @@ -2646,7 +2646,7 @@ "type": "t_mapping(t_address,t_uint256)" }, { - "astId": 12589, + "astId": 12608, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "_allowances", "offset": 0, @@ -2654,7 +2654,7 @@ "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" }, { - "astId": 12591, + "astId": 12610, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "_totalSupply", "offset": 0, @@ -2662,7 +2662,7 @@ "type": "t_uint256" }, { - "astId": 12593, + "astId": 12612, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "_name", "offset": 0, @@ -2670,7 +2670,7 @@ "type": "t_string_storage" }, { - "astId": 12595, + "astId": 12614, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "_symbol", "offset": 0, @@ -2678,7 +2678,7 @@ "type": "t_string_storage" }, { - "astId": 13175, + "astId": 13194, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "__gap", "offset": 0, @@ -2686,7 +2686,7 @@ "type": "t_array(t_uint256)45_storage" }, { - "astId": 6880, + "astId": 6899, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "srcToken", "offset": 0, @@ -2694,7 +2694,7 @@ "type": "t_address" }, { - "astId": 6882, + "astId": 6901, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "__srcDecimals", "offset": 20, @@ -2702,7 +2702,7 @@ "type": "t_uint8" }, { - "astId": 6885, + "astId": 6904, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "srcChainId", "offset": 0, @@ -2710,7 +2710,7 @@ "type": "t_uint256" }, { - "astId": 6888, + "astId": 6907, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "migratingAddress", "offset": 0, @@ -2718,7 +2718,7 @@ "type": "t_address" }, { - "astId": 6891, + "astId": 6910, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "migratingInbound", "offset": 20, @@ -2726,7 +2726,7 @@ "type": "t_bool" }, { - "astId": 6895, + "astId": 6914, "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", "label": "__gap", "offset": 0, @@ -2808,7 +2808,7 @@ "BridgedERC721": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "_initialized", "offset": 0, @@ -2816,7 +2816,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "_initializing", "offset": 1, @@ -2824,7 +2824,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "__gap", "offset": 0, @@ -2832,7 +2832,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "_owner", "offset": 0, @@ -2840,7 +2840,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "__gap", "offset": 0, @@ -2848,7 +2848,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "_pendingOwner", "offset": 0, @@ -2856,7 +2856,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "__gap", "offset": 0, @@ -2864,7 +2864,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "addressManager", "offset": 0, @@ -2872,7 +2872,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "__gap", "offset": 0, @@ -2880,7 +2880,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "__reentry", "offset": 0, @@ -2888,7 +2888,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "__paused", "offset": 1, @@ -2896,7 +2896,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "lastUnpausedAt", "offset": 2, @@ -2904,7 +2904,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "__gap", "offset": 0, @@ -2912,7 +2912,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 16755, + "astId": 16774, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "__gap", "offset": 0, @@ -2920,7 +2920,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 14292, + "astId": 14311, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "_name", "offset": 0, @@ -2928,7 +2928,7 @@ "type": "t_string_storage" }, { - "astId": 14294, + "astId": 14313, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "_symbol", "offset": 0, @@ -2936,7 +2936,7 @@ "type": "t_string_storage" }, { - "astId": 14298, + "astId": 14317, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "_owners", "offset": 0, @@ -2944,7 +2944,7 @@ "type": "t_mapping(t_uint256,t_address)" }, { - "astId": 14302, + "astId": 14321, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "_balances", "offset": 0, @@ -2952,7 +2952,7 @@ "type": "t_mapping(t_address,t_uint256)" }, { - "astId": 14306, + "astId": 14325, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "_tokenApprovals", "offset": 0, @@ -2960,7 +2960,7 @@ "type": "t_mapping(t_uint256,t_address)" }, { - "astId": 14312, + "astId": 14331, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "_operatorApprovals", "offset": 0, @@ -2968,7 +2968,7 @@ "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" }, { - "astId": 15214, + "astId": 15233, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "__gap", "offset": 0, @@ -2976,7 +2976,7 @@ "type": "t_array(t_uint256)44_storage" }, { - "astId": 7519, + "astId": 7538, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "srcToken", "offset": 0, @@ -2984,7 +2984,7 @@ "type": "t_address" }, { - "astId": 7522, + "astId": 7541, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "srcChainId", "offset": 0, @@ -2992,7 +2992,7 @@ "type": "t_uint256" }, { - "astId": 7526, + "astId": 7545, "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", "label": "__gap", "offset": 0, @@ -3088,7 +3088,7 @@ "BridgedERC1155": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "_initialized", "offset": 0, @@ -3096,7 +3096,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "_initializing", "offset": 1, @@ -3104,7 +3104,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "__gap", "offset": 0, @@ -3112,7 +3112,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "_owner", "offset": 0, @@ -3120,7 +3120,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "__gap", "offset": 0, @@ -3128,7 +3128,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "_pendingOwner", "offset": 0, @@ -3136,7 +3136,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "__gap", "offset": 0, @@ -3144,7 +3144,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "addressManager", "offset": 0, @@ -3152,7 +3152,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "__gap", "offset": 0, @@ -3160,7 +3160,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "__reentry", "offset": 0, @@ -3168,7 +3168,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "__paused", "offset": 1, @@ -3176,7 +3176,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "lastUnpausedAt", "offset": 2, @@ -3184,7 +3184,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "__gap", "offset": 0, @@ -3192,7 +3192,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 16755, + "astId": 16774, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "__gap", "offset": 0, @@ -3200,7 +3200,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 11114, + "astId": 11133, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "_balances", "offset": 0, @@ -3208,7 +3208,7 @@ "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))" }, { - "astId": 11120, + "astId": 11139, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "_operatorApprovals", "offset": 0, @@ -3216,7 +3216,7 @@ "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" }, { - "astId": 11122, + "astId": 11141, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "_uri", "offset": 0, @@ -3224,7 +3224,7 @@ "type": "t_string_storage" }, { - "astId": 12329, + "astId": 12348, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "__gap", "offset": 0, @@ -3232,7 +3232,7 @@ "type": "t_array(t_uint256)47_storage" }, { - "astId": 6653, + "astId": 6672, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "srcToken", "offset": 0, @@ -3240,7 +3240,7 @@ "type": "t_address" }, { - "astId": 6656, + "astId": 6675, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "srcChainId", "offset": 0, @@ -3248,7 +3248,7 @@ "type": "t_uint256" }, { - "astId": 6659, + "astId": 6678, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "symbol", "offset": 0, @@ -3256,7 +3256,7 @@ "type": "t_string_storage" }, { - "astId": 6662, + "astId": 6681, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "name", "offset": 0, @@ -3264,7 +3264,7 @@ "type": "t_string_storage" }, { - "astId": 6666, + "astId": 6685, "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", "label": "__gap", "offset": 0, @@ -3360,7 +3360,7 @@ "SignalServiceImpl": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "_initialized", "offset": 0, @@ -3368,7 +3368,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "_initializing", "offset": 1, @@ -3376,7 +3376,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "__gap", "offset": 0, @@ -3384,7 +3384,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "_owner", "offset": 0, @@ -3392,7 +3392,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "__gap", "offset": 0, @@ -3400,7 +3400,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "_pendingOwner", "offset": 0, @@ -3408,7 +3408,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "__gap", "offset": 0, @@ -3416,7 +3416,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "addressManager", "offset": 0, @@ -3424,7 +3424,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "__gap", "offset": 0, @@ -3432,7 +3432,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "__reentry", "offset": 0, @@ -3440,7 +3440,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "__paused", "offset": 1, @@ -3448,7 +3448,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "lastUnpausedAt", "offset": 2, @@ -3456,7 +3456,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "__gap", "offset": 0, @@ -3464,7 +3464,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 5215, + "astId": 5234, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "topBlockId", "offset": 0, @@ -3472,7 +3472,7 @@ "type": "t_mapping(t_uint64,t_mapping(t_bytes32,t_uint64))" }, { - "astId": 5220, + "astId": 5239, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "isAuthorized", "offset": 0, @@ -3480,7 +3480,7 @@ "type": "t_mapping(t_address,t_bool)" }, { - "astId": 5224, + "astId": 5243, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "__gap", "offset": 0, @@ -3563,7 +3563,7 @@ "SignalService": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "_initialized", "offset": 0, @@ -3571,7 +3571,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "_initializing", "offset": 1, @@ -3579,7 +3579,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "__gap", "offset": 0, @@ -3587,7 +3587,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "_owner", "offset": 0, @@ -3595,7 +3595,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "__gap", "offset": 0, @@ -3603,7 +3603,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "_pendingOwner", "offset": 0, @@ -3611,7 +3611,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "__gap", "offset": 0, @@ -3619,7 +3619,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "addressManager", "offset": 0, @@ -3627,7 +3627,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "__gap", "offset": 0, @@ -3635,7 +3635,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "__reentry", "offset": 0, @@ -3643,7 +3643,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "__paused", "offset": 1, @@ -3651,7 +3651,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "lastUnpausedAt", "offset": 2, @@ -3659,7 +3659,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "__gap", "offset": 0, @@ -3667,7 +3667,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 5215, + "astId": 5234, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "topBlockId", "offset": 0, @@ -3675,7 +3675,7 @@ "type": "t_mapping(t_uint64,t_mapping(t_bytes32,t_uint64))" }, { - "astId": 5220, + "astId": 5239, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "isAuthorized", "offset": 0, @@ -3683,7 +3683,7 @@ "type": "t_mapping(t_address,t_bool)" }, { - "astId": 5224, + "astId": 5243, "contract": "contracts/shared/signal/SignalService.sol:SignalService", "label": "__gap", "offset": 0, @@ -3766,7 +3766,7 @@ "TaikoL2Impl": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "_initialized", "offset": 0, @@ -3774,7 +3774,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "_initializing", "offset": 1, @@ -3782,7 +3782,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "__gap", "offset": 0, @@ -3790,7 +3790,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "_owner", "offset": 0, @@ -3798,7 +3798,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "__gap", "offset": 0, @@ -3806,7 +3806,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "_pendingOwner", "offset": 0, @@ -3814,7 +3814,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "__gap", "offset": 0, @@ -3822,7 +3822,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "addressManager", "offset": 0, @@ -3830,7 +3830,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "__gap", "offset": 0, @@ -3838,7 +3838,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "__reentry", "offset": 0, @@ -3846,7 +3846,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "__paused", "offset": 1, @@ -3854,7 +3854,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "lastUnpausedAt", "offset": 2, @@ -3862,7 +3862,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "__gap", "offset": 0, @@ -3995,7 +3995,7 @@ "TaikoL2": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "_initialized", "offset": 0, @@ -4003,7 +4003,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "_initializing", "offset": 1, @@ -4011,7 +4011,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "__gap", "offset": 0, @@ -4019,7 +4019,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "_owner", "offset": 0, @@ -4027,7 +4027,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "__gap", "offset": 0, @@ -4035,7 +4035,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "_pendingOwner", "offset": 0, @@ -4043,7 +4043,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "__gap", "offset": 0, @@ -4051,7 +4051,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "addressManager", "offset": 0, @@ -4059,7 +4059,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "__gap", "offset": 0, @@ -4067,7 +4067,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "__reentry", "offset": 0, @@ -4075,7 +4075,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "__paused", "offset": 1, @@ -4083,7 +4083,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "lastUnpausedAt", "offset": 2, @@ -4091,7 +4091,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", "label": "__gap", "offset": 0, @@ -4224,7 +4224,7 @@ "RollupAddressManagerImpl": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "_initialized", "offset": 0, @@ -4232,7 +4232,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "_initializing", "offset": 1, @@ -4240,7 +4240,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -4248,7 +4248,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "_owner", "offset": 0, @@ -4256,7 +4256,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -4264,7 +4264,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "_pendingOwner", "offset": 0, @@ -4272,7 +4272,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -4280,7 +4280,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "addressManager", "offset": 0, @@ -4288,7 +4288,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -4296,7 +4296,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__reentry", "offset": 0, @@ -4304,7 +4304,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__paused", "offset": 1, @@ -4312,7 +4312,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "lastUnpausedAt", "offset": 2, @@ -4320,7 +4320,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -4328,7 +4328,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3522, + "astId": 3541, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__addresses", "offset": 0, @@ -4336,7 +4336,7 @@ "type": "t_mapping(t_uint256,t_mapping(t_bytes32,t_address))" }, { - "astId": 3526, + "astId": 3545, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -4406,7 +4406,7 @@ "RollupAddressManager": { "storage": [ { - "astId": 10922, + "astId": 10941, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "_initialized", "offset": 0, @@ -4414,7 +4414,7 @@ "type": "t_uint8" }, { - "astId": 10925, + "astId": 10944, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "_initializing", "offset": 1, @@ -4422,7 +4422,7 @@ "type": "t_bool" }, { - "astId": 15756, + "astId": 15775, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -4430,7 +4430,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 10667, + "astId": 10686, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "_owner", "offset": 0, @@ -4438,7 +4438,7 @@ "type": "t_address" }, { - "astId": 10787, + "astId": 10806, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -4446,7 +4446,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 10560, + "astId": 10579, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "_pendingOwner", "offset": 0, @@ -4454,7 +4454,7 @@ "type": "t_address" }, { - "astId": 10654, + "astId": 10673, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -4462,7 +4462,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3661, + "astId": 3680, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "addressManager", "offset": 0, @@ -4470,7 +4470,7 @@ "type": "t_address" }, { - "astId": 3665, + "astId": 3684, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -4478,7 +4478,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3917, + "astId": 3936, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__reentry", "offset": 0, @@ -4486,7 +4486,7 @@ "type": "t_uint8" }, { - "astId": 3919, + "astId": 3938, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__paused", "offset": 1, @@ -4494,7 +4494,7 @@ "type": "t_uint8" }, { - "astId": 3921, + "astId": 3940, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "lastUnpausedAt", "offset": 2, @@ -4502,7 +4502,7 @@ "type": "t_uint64" }, { - "astId": 3925, + "astId": 3944, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -4510,7 +4510,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 3522, + "astId": 3541, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__addresses", "offset": 0, @@ -4518,7 +4518,7 @@ "type": "t_mapping(t_uint256,t_mapping(t_bytes32,t_address))" }, { - "astId": 3526, + "astId": 3545, "contract": "contracts/shared/common/AddressManager.sol:AddressManager", "label": "__gap", "offset": 0, @@ -4592,7 +4592,7 @@ "RegularERC20": { "storage": [ { - "astId": 20305, + "astId": 20324, "contract": "test/shared/token/RegularERC20.sol:RegularERC20", "label": "_balances", "offset": 0, @@ -4600,7 +4600,7 @@ "type": "t_mapping(t_address,t_uint256)" }, { - "astId": 20311, + "astId": 20330, "contract": "test/shared/token/RegularERC20.sol:RegularERC20", "label": "_allowances", "offset": 0, @@ -4608,7 +4608,7 @@ "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" }, { - "astId": 20313, + "astId": 20332, "contract": "test/shared/token/RegularERC20.sol:RegularERC20", "label": "_totalSupply", "offset": 0, @@ -4616,7 +4616,7 @@ "type": "t_uint256" }, { - "astId": 20315, + "astId": 20334, "contract": "test/shared/token/RegularERC20.sol:RegularERC20", "label": "_name", "offset": 0, @@ -4624,7 +4624,7 @@ "type": "t_string_storage" }, { - "astId": 20317, + "astId": 20336, "contract": "test/shared/token/RegularERC20.sol:RegularERC20", "label": "_symbol", "offset": 0, From 9f99099ac271e6e2a0973a43084e29169386f2cd Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Thu, 19 Sep 2024 00:31:59 +0800 Subject: [PATCH 03/13] fix(protocol): reward non-assigned prover 7/8 liveness bond (#18132) --- .../contracts/layer1/based/LibProving.sol | 14 ++++++++++--- .../test/layer1/based/TaikoL1TestGroup1.t.sol | 16 ++++++++------- .../test/layer1/based/TaikoL1TestGroup3.t.sol | 20 +++++++++++++++---- .../test/layer1/based/TaikoL1TestGroup4.t.sol | 4 +++- .../test/layer1/based/TaikoL1TestGroup5.t.sol | 8 ++++++-- .../test/layer1/based/TaikoL1TestGroup9.t.sol | 10 ++++++++-- 6 files changed, 53 insertions(+), 19 deletions(-) diff --git a/packages/protocol/contracts/layer1/based/LibProving.sol b/packages/protocol/contracts/layer1/based/LibProving.sol index 753fa6f097..0c96335ec8 100644 --- a/packages/protocol/contracts/layer1/based/LibProving.sol +++ b/packages/protocol/contracts/layer1/based/LibProving.sol @@ -588,8 +588,9 @@ library LibProving { // The contested transition is proven to be invalid, contester wins the game. // Contester gets 3/4 of reward, the new prover gets 1/4. reward = _rewardAfterFriction(_ts.validityBond) >> 2; - - LibBonds.creditBond(_state, _ts.contester, _ts.contestBond + reward * 3); + unchecked { + LibBonds.creditBond(_state, _ts.contester, _ts.contestBond + reward * 3); + } } } else { if (_local.sameTransition) revert L1_ALREADY_PROVED(); @@ -607,10 +608,17 @@ library LibProving { if (_returnLivenessBond(_local, _proof.data)) { if (_local.assignedProver == msg.sender) { - reward += _local.livenessBond; + unchecked { + reward += _local.livenessBond; + } } else { LibBonds.creditBond(_state, _local.assignedProver, _local.livenessBond); } + } else { + // Reward a majority of liveness bond to the actual prover + unchecked { + reward += _rewardAfterFriction(_local.livenessBond); + } } } } diff --git a/packages/protocol/test/layer1/based/TaikoL1TestGroup1.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup1.t.sol index 7192f3b8e6..93aff49bbe 100644 --- a/packages/protocol/test/layer1/based/TaikoL1TestGroup1.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup1.t.sol @@ -116,7 +116,6 @@ contract TaikoL1TestGroup1 is TaikoL1TestGroupBase { printBlockAndTrans(0); giveEthAndTko(Alice, 10_000 ether, 1000 ether); - giveEthAndTko(Taylor, 10_000 ether, 1000 ether); ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); @@ -171,7 +170,10 @@ contract TaikoL1TestGroup1 is TaikoL1TestGroupBase { provenAt = ts.timestamp; - assertEq(totalTkoBalance(tko, L1, Taylor), 10_000 ether - tierOp.validityBond); + assertEq( + totalTkoBalance(tko, L1, Taylor), + 10_000 ether - tierOp.validityBond + livenessBond * 7 / 8 + ); } console2.log("====== Verify block"); @@ -196,7 +198,7 @@ contract TaikoL1TestGroup1 is TaikoL1TestGroupBase { assertEq(ts.timestamp, provenAt); assertEq(totalTkoBalance(tko, L1, Alice), 10_000 ether - livenessBond); - assertEq(totalTkoBalance(tko, L1, Taylor), 10_000 ether); + assertEq(totalTkoBalance(tko, L1, Taylor), 10_000 ether + livenessBond * 7 / 8); } } @@ -351,17 +353,16 @@ contract TaikoL1TestGroup1 is TaikoL1TestGroupBase { assertEq(totalTkoBalance(tko, L1, Alice), 10_000 ether - L1.getConfig().livenessBond); } } + // Test summary: // 1. Alice proposes a block, // 2. Alice proves the block outside the proving window, using the correct parent hash. // 3. Alice's proof is used to verify the block. - function test_taikoL1_group_1_case_6() external { vm.warp(1_000_000); printBlockAndTrans(0); giveEthAndTko(Alice, 10_000 ether, 1000 ether); - giveEthAndTko(Taylor, 10_000 ether, 1000 ether); ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); @@ -417,7 +418,8 @@ contract TaikoL1TestGroup1 is TaikoL1TestGroupBase { provenAt = ts.timestamp; assertEq( - totalTkoBalance(tko, L1, Alice), 10_000 ether - tierOp.validityBond - livenessBond + totalTkoBalance(tko, L1, Alice), + 10_000 ether - tierOp.validityBond - livenessBond / 8 ); } @@ -442,7 +444,7 @@ contract TaikoL1TestGroup1 is TaikoL1TestGroupBase { assertEq(ts.validityBond, tierOp.validityBond); assertEq(ts.timestamp, provenAt); - assertEq(totalTkoBalance(tko, L1, Alice), 10_000 ether - livenessBond); + assertEq(totalTkoBalance(tko, L1, Alice), 10_000 ether - livenessBond / 8); } } diff --git a/packages/protocol/test/layer1/based/TaikoL1TestGroup3.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup3.t.sol index b27ffda2c9..000fefb99e 100644 --- a/packages/protocol/test/layer1/based/TaikoL1TestGroup3.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup3.t.sol @@ -59,7 +59,10 @@ contract TaikoL1TestGroup3 is TaikoL1TestGroupBase { assertEq(ts.timestamp, block.timestamp); assertEq(totalTkoBalance(tko, L1, Alice), 10_000 ether - livenessBond); - assertEq(totalTkoBalance(tko, L1, James), 10_000 ether - tierOp.validityBond); + assertEq( + totalTkoBalance(tko, L1, James), + 10_000 ether - tierOp.validityBond + livenessBond * 7 / 8 + ); assertEq(totalTkoBalance(tko, L1, Taylor), 10_000 ether - tierOp.contestBond); } @@ -169,7 +172,10 @@ contract TaikoL1TestGroup3 is TaikoL1TestGroupBase { assertEq(ts.timestamp, block.timestamp); assertEq(totalTkoBalance(tko, L1, Alice), 10_000 ether - livenessBond); - assertEq(totalTkoBalance(tko, L1, James), 10_000 ether - tierOp.validityBond); + assertEq( + totalTkoBalance(tko, L1, James), + 10_000 ether - tierOp.validityBond + livenessBond * 7 / 8 + ); assertEq(totalTkoBalance(tko, L1, Taylor), 10_000 ether - tierOp.contestBond); } @@ -195,7 +201,10 @@ contract TaikoL1TestGroup3 is TaikoL1TestGroupBase { assertEq(ts.timestamp, block.timestamp); assertEq(totalTkoBalance(tko, L1, Alice), 10_000 ether - livenessBond); - assertEq(totalTkoBalance(tko, L1, James), 10_000 ether - tierOp.validityBond); + assertEq( + totalTkoBalance(tko, L1, James), + 10_000 ether - tierOp.validityBond + livenessBond * 7 / 8 + ); uint256 quarterReward = tierOp.validityBond * 7 / 8 / 4; assertEq(totalTkoBalance(tko, L1, Taylor), 10_000 ether + quarterReward * 3); @@ -227,7 +236,10 @@ contract TaikoL1TestGroup3 is TaikoL1TestGroupBase { assertEq(totalTkoBalance(tko, L1, Alice), 10_000 ether - livenessBond); uint256 quarterReward = tierOp.validityBond * 7 / 8 / 4; - assertEq(totalTkoBalance(tko, L1, James), 10_000 ether - tierOp.validityBond); + assertEq( + totalTkoBalance(tko, L1, James), + 10_000 ether - tierOp.validityBond + livenessBond * 7 / 8 + ); assertEq(totalTkoBalance(tko, L1, Taylor), 10_000 ether + quarterReward * 3); assertEq(totalTkoBalance(tko, L1, William), 10_000 ether + quarterReward); } diff --git a/packages/protocol/test/layer1/based/TaikoL1TestGroup4.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup4.t.sol index c5850ebf3b..01b503f5cd 100644 --- a/packages/protocol/test/layer1/based/TaikoL1TestGroup4.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup4.t.sol @@ -135,7 +135,9 @@ contract TaikoL1TestGroup4 is TaikoL1TestGroupBase { assertEq(ts.timestamp, block.timestamp); assertEq(totalTkoBalance(tko, L1, Alice), 10_000 ether - livenessBond); - assertEq(tko.balanceOf(David), 10_000 ether - tierOp.validityBond); + assertEq( + tko.balanceOf(David), 10_000 ether - tierOp.validityBond + livenessBond * 7 / 8 + ); assertEq( tko.balanceOf(Taylor), 10_000 ether - tierSgx.validityBond + tierOp.validityBond * 7 / 8 diff --git a/packages/protocol/test/layer1/based/TaikoL1TestGroup5.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup5.t.sol index d6d1a294b2..ac7d7fc0ef 100644 --- a/packages/protocol/test/layer1/based/TaikoL1TestGroup5.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup5.t.sol @@ -274,7 +274,9 @@ contract TaikoL1TestGroup5 is TaikoL1TestGroupBase { assertEq(ts.timestamp, block.timestamp); assertEq(totalTkoBalance(tko, L1, Alice), 10_000 ether - livenessBond); - assertEq(tko.balanceOf(David), 10_000 ether - tierOp.validityBond); + assertEq( + tko.balanceOf(David), 10_000 ether - tierOp.validityBond + livenessBond * 7 / 8 + ); assertEq(totalTkoBalance(tko, L1, William), 10_000 ether); } @@ -297,7 +299,9 @@ contract TaikoL1TestGroup5 is TaikoL1TestGroupBase { assertEq(ts.prover, address(gp)); assertEq(totalTkoBalance(tko, L1, Alice), 10_000 ether - livenessBond); - assertEq(tko.balanceOf(David), 10_000 ether - tierOp.validityBond); + assertEq( + tko.balanceOf(David), 10_000 ether - tierOp.validityBond + livenessBond * 7 / 8 + ); assertEq(totalTkoBalance(tko, L1, William), 10_000 ether); } } diff --git a/packages/protocol/test/layer1/based/TaikoL1TestGroup9.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup9.t.sol index e1aa9e67bf..563512ef66 100644 --- a/packages/protocol/test/layer1/based/TaikoL1TestGroup9.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup9.t.sol @@ -301,7 +301,10 @@ contract TaikoL1TestGroup5 is TaikoL1TestGroupBase { assertEq(ts.timestamp, block.timestamp); assertEq(totalTkoBalance(tko, L1, Alice), 10_000 ether - livenessBond); - assertEq(totalTkoBalance(tko, L1, Carol), 10_000 ether - tierOp.validityBond); + assertEq( + totalTkoBalance(tko, L1, Carol), + 10_000 ether - tierOp.validityBond + livenessBond * 7 / 8 + ); assertEq(totalTkoBalance(tko, L1, William), 10_000 ether); } @@ -325,7 +328,10 @@ contract TaikoL1TestGroup5 is TaikoL1TestGroupBase { assertEq(ts.prover, address(gp)); assertEq(totalTkoBalance(tko, L1, Alice), 10_000 ether - livenessBond); - assertEq(totalTkoBalance(tko, L1, Carol), 10_000 ether - tierOp.validityBond); + assertEq( + totalTkoBalance(tko, L1, Carol), + 10_000 ether - tierOp.validityBond + livenessBond * 7 / 8 + ); assertEq(totalTkoBalance(tko, L1, William), 10_000 ether); } } From ce5d4859a77631ec406ccb5d571efcd91e5fd2f8 Mon Sep 17 00:00:00 2001 From: Korbinian Date: Thu, 19 Sep 2024 03:59:14 +0300 Subject: [PATCH 04/13] feat(bridge-ui): add padding when claiming to smart contract (#18141) Co-authored-by: Karim --- .github/workflows/repo--vercel-deploy.yml | 3 +++ packages/bridge-ui/src/libs/bridge/Bridge.ts | 21 +++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/repo--vercel-deploy.yml b/.github/workflows/repo--vercel-deploy.yml index 345fffeebc..4d06f1852e 100644 --- a/.github/workflows/repo--vercel-deploy.yml +++ b/.github/workflows/repo--vercel-deploy.yml @@ -33,6 +33,9 @@ jobs: run: | echo "Vercel Project ID: ${{ env.VERCEL_PROJECT_ID }}" + - name: Install Git + run: sudo apt-get update && sudo apt-get install -y git + - name: Checkout repository uses: actions/checkout@v4 diff --git a/packages/bridge-ui/src/libs/bridge/Bridge.ts b/packages/bridge-ui/src/libs/bridge/Bridge.ts index 1bcf689b9a..5e73e5d268 100644 --- a/packages/bridge-ui/src/libs/bridge/Bridge.ts +++ b/packages/bridge-ui/src/libs/bridge/Bridge.ts @@ -6,6 +6,7 @@ import { routingContractsMap } from '$bridgeConfig'; import { MessageStatusError, ProcessMessageError, ReleaseError, WrongChainError, WrongOwnerError } from '$libs/error'; import type { BridgeProver } from '$libs/proof'; import { getConnectedWallet } from '$libs/util/getConnectedWallet'; +import { isSmartContract } from '$libs/util/isSmartContract'; import { getLogger } from '$libs/util/logger'; import { config } from '$libs/wagmi'; @@ -262,6 +263,11 @@ export abstract class Bridge { console.error('Failed to estimate gas, using fallback', error); estimatedGas = 1_300_000n; } + + if (message.to && (await isSmartContract(message.to, Number(message.destChainId)))) { + log(`Recipient is a smart contract, increasing fees by 5 percent`); + estimatedGas = (estimatedGas * 105n) / 100n; + } if (force) { return await writeContract(config, { address: bridgeContract.address, @@ -293,10 +299,13 @@ export abstract class Bridge { if (!message) throw new ProcessMessageError('Message is not defined'); - const estimatedGas = await bridgeContract.estimateGas.retryMessage([message, isFinalAttempt], { + let estimatedGas = await bridgeContract.estimateGas.retryMessage([message, isFinalAttempt], { account: client.account, }); - + if (message.to && (await isSmartContract(message.to, Number(message.destChainId)))) { + log(`Recipient is a smart contract, increasing fees by 5 percent`); + estimatedGas = (estimatedGas * 105n) / 100n; + } log('Estimated gas for retryMessage', estimatedGas); const { request } = await simulateContract(config, { @@ -319,9 +328,15 @@ export abstract class Bridge { log('Estimating gas for recallMessage', bridgeContract.address, [message, proof]); - const estimatedGas = await bridgeContract.estimateGas.recallMessage([message, proof], { account: client.account }); + let estimatedGas = await bridgeContract.estimateGas.recallMessage([message, proof], { account: client.account }); log('Estimated gas for recallMessage', estimatedGas); + if (message.from && (await isSmartContract(message.from, Number(message.srcChainId)))) { + log(`Sender is a smart contract, increasing fees by 5 percent`); + estimatedGas = (estimatedGas * 105n) / 100n; + } + log('Estimated gas for retryMessage', estimatedGas); + const { request } = await simulateContract(config, { address: bridgeContract.address, abi: bridgeContract.abi, From 49b50712551849d185c98237098d236bb0cf884c Mon Sep 17 00:00:00 2001 From: Roger <50648015+RogerLamTd@users.noreply.github.com> Date: Wed, 18 Sep 2024 19:34:10 -0700 Subject: [PATCH 05/13] feat(docs-site): update docs for ontake fork hekla (#18143) --- .../node-operators/deploy-a-proverset.mdx | 4 +-- .../node-operators/enable-a-proposer.mdx | 7 +---- .../guides/node-operators/enable-a-prover.mdx | 26 ++++++++++++------- .../content/docs/resources/terminology.mdx | 4 +-- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/packages/docs-site/src/content/docs/guides/node-operators/deploy-a-proverset.mdx b/packages/docs-site/src/content/docs/guides/node-operators/deploy-a-proverset.mdx index 7a4a52aab1..a0364bcec8 100644 --- a/packages/docs-site/src/content/docs/guides/node-operators/deploy-a-proverset.mdx +++ b/packages/docs-site/src/content/docs/guides/node-operators/deploy-a-proverset.mdx @@ -133,7 +133,7 @@ If you've already deployed a ProverSet but would like to upgrade it through the Execute the following command, filling in the values in the curly braces appropriately. ```bash - forge create --private-key {YOUR_PRIVATE_KEY} --chain-id 17000 --rpc-url {YOUR_RPC_URL} contracts/layer1/provers/ProverSet.sol:ProverSet + forge create --private-key {YOUR_PRIVATE_KEY} --chain-id {CHAIN_ID} --rpc-url {YOUR_RPC_URL} contracts/layer1/provers/ProverSet.sol:ProverSet ```